Pemisahan transaksi mengalihkan permintaan baca dalam transaksi tanpa auto-commit dari instans primary ke instans hanya baca—tanpa perubahan pada kode aplikasi. Saat semua kueri dijalankan dalam transaksi dengan autocommit dinonaktifkan, instans primary menangani seluruh permintaan, meskipun operasi baca tidak memerlukan akses tulis. Pemisahan transaksi mengarahkan operasi baca tersebut ke instans hanya baca sebelum operasi tulis pertama dimulai, sehingga mengurangi beban pada instans primary dan meningkatkan stabilitasnya.
Prasyarat
Sebelum memulai, pastikan Anda telah:
Mengaktifkan fitur database proxy pada instans ApsaraDB RDS for PostgreSQL Anda. Lihat Aktifkan fitur database proxy.
Cara kerja
Secara default, database proxy mengirimkan semua permintaan dalam transaksi ke instans primary untuk menjaga konsistensi baca/tulis. Hal ini diperlukan untuk operasi tulis, tetapi permintaan baca yang dilakukan sebelum operasi tulis apa pun juga dikirim ke instans primary—meskipun instans hanya baca dapat melayaninya dengan aman.
Pemisahan transaksi mengubah perilaku ini jika kedua kondisi berikut terpenuhi:
Tingkat isolasi transaksi adalah READ COMMITTED (nilai default PostgreSQL).
Autocommit dinonaktifkan (
autocommit = off).
Dalam kondisi tersebut, proksi menunda pembukaan transaksi pada instans primary hingga operasi tulis pertama dilakukan. Semua permintaan baca yang dikeluarkan sebelum operasi tulis tersebut diarahkan ke instans hanya baca melalui load balancer.
Pemisahan transaksi diaktifkan secara otomatis saat Anda mengaktifkan database proxy dan tidak dapat dinonaktifkan.
Batasan
Tidak semua transaksi dapat dipisah. Pastikan pemisahan transaksi sesuai dengan beban kerja Anda sebelum mengaktifkan database proxy.
| Batasan | Detail |
|---|---|
| Transaksi eksplisit | Transaksi yang dimulai dengan BEGIN atau START TRANSACTION tidak pernah dipisah. Semua permintaan dalam transaksi eksplisit dialihkan ke instans primary. |
| Konsistensi global | Pemisahan transaksi tidak dapat menjamin konsistensi global antarpermintaan. Evaluasi pertukaran ini sebelum mengaktifkan database proxy. |
| Tidak dapat dinonaktifkan | Setelah database proxy diaktifkan, pemisahan transaksi selalu aktif. Tidak ada opsi untuk menonaktifkannya secara terpisah. |
Kapan menggunakan pemisahan transaksi
Pemisahan transaksi paling efektif ketika aplikasi Anda membungkus kueri yang dominan baca dalam transaksi tanpa auto-commit dan tidak menggunakan pernyataan eksplisit BEGIN atau START TRANSACTION.
| Skenario | Cocok? |
|---|---|
| Aplikasi dengan autocommit dinonaktifkan, sebagian besar operasi baca sebelum tulis | Ya |
Transaksi eksplisit menggunakan BEGIN atau START TRANSACTION | Tidak—operasi baca tetap berada di instance utama |
| Beban kerja yang memerlukan konsistensi global ketat untuk semua operasi baca | Tidak — konsistensi global tidak dapat dijamin |
Referensi API
| Operasi | Deskripsi |
|---|---|
| DescribeDBProxy | Kueri detail proksi database |
| DescribeDBProxyEndpoint | Kueri informasi tentang titik akhir proksi database |