PolarDB mendukung pooling koneksi tingkat transaksi. Fitur ini dapat digunakan untuk mengurangi beban database akibat banyaknya koneksi.
Prasyarat
Fitur pooling koneksi tingkat transaksi memerlukan proksi database versi 2.3.46 atau lebih baru.
Informasi latar belakang
PolarDB for PostgreSQL menggunakan model koneksi di mana setiap koneksi memerlukan proses khusus. Model ini dapat menyebabkan peningkatan signifikan pada beban database dan penurunan kinerja ketika klien mempertahankan banyak koneksi persisten atau sering membuat koneksi baru.
Untuk meningkatkan kinerja dalam skenario tersebut, PolarDB for PostgreSQL menyediakan fitur pooling koneksi tingkat transaksi. Fitur ini memungkinkan beberapa koneksi frontend berbagi satu koneksi backend, sehingga mengurangi jumlah koneksi backend yang dibuat dan dipertahankan serta meningkatkan daya pemrosesan database.
Cara kerja
Pooling koneksi tingkat transaksi mengurangi jumlah koneksi langsung ke database dan mengurangi beban akibat pembuatan koneksi yang sering terjadi pada skenario dengan koneksi singkat.
Saat Anda mengaktifkan pooling koneksi tingkat transaksi, permintaan klien pertama kali terhubung ke proksi PolarDB. Proksi tidak langsung terhubung ke database backend, melainkan memeriksa kolam koneksi untuk mencari koneksi yang tersedia. Koneksi dianggap tersedia jika nilai `user`, `dbname`, dan variabel sistemnya cocok dengan permintaan. Jika tidak ada koneksi yang cocok, proksi akan membuat koneksi baru ke database; jika ditemukan koneksi yang cocok, proksi akan menggunakannya kembali. Setelah transaksi selesai, koneksi dikembalikan ke kolam untuk permintaan berikutnya. Proses ini mengurangi jumlah koneksi antara proksi database dan database.
Dengan pooling koneksi tingkat transaksi diaktifkan, dapat terdapat ribuan koneksi antara klien dan proksi PolarDB, tetapi hanya puluhan atau ratusan koneksi antara proksi dan database backend.
Proksi PolarDB itu sendiri tidak memiliki batas maksimum koneksi. Batas koneksi ditentukan oleh spesifikasi node komputasi di database backend. Saat pooling koneksi tingkat transaksi dinonaktifkan, setiap koneksi dari klien akan membuat koneksi yang sesuai pada node primer backend dan semua node read-only.
Petunjuk penggunaan
Mengaktifkan pooling koneksi tingkat transaksi
Masuk ke Konsol PolarDB.
Di pojok kiri atas konsol, pilih wilayah tempat kluster berada.
Temukan kluster target dan klik ID kluster tersebut.
Di area Endpoints, klik Configure.
Untuk Connection Pool, klik Transaction-level.
Klik OK.
Menonaktifkan pooling koneksi tingkat transaksi
Masuk ke Konsol PolarDB.
Di pojok kiri atas konsol, pilih wilayah tempat kluster berada.
Temukan kluster target dan klik ID kluster tersebut.
Di area Endpoints, klik Configure.
Di baris Connection Pool, klik Shutdown.
Klik OK.
Batasan
Permintaan
CANCELdapat menyebabkan sesihangjika pooling koneksi tingkat transaksi diaktifkan. Untuk menggunakan fiturCANCEL, Anda harus menonaktifkan pooling koneksi tingkat transaksi.Saat Anda melakukan aksi berikut, koneksi akan terkunci hingga ditutup. Koneksi yang terkunci tidak dikembalikan ke kolam koneksi untuk digunakan klien lain.
Menjalankan pernyataan
PREPAREMengirim atau menerima paket besar, seperti yang berukuran lebih dari 16 MB
Menggunakan
Copy ModeMenggunakan
Flush ModeTabel sementara (
Temporary Table), sequence (Sequence), dan tampilan (View)Selama transaksi
Mendeklarasikan
Cursor
Fitur PostgreSQL berikut memiliki masalah kompatibilitas dengan pooling koneksi tingkat transaksi. Menggunakannya dapat menyebabkan perilaku yang tidak diharapkan. Untuk memastikan semantik yang benar, Anda harus menonaktifkan pooling koneksi tingkat transaksi saat menggunakan fitur-fitur ini:
Sequence (
Sequence)Kunci tingkat aplikasi (
advisory lock)Listener dan notifikasi (
LISTEN/NOTIFY)Cursor yang dapat dipertahankan (
Holdable Cursor)
Karena koneksi dapat digunakan kembali,
pidyang dikembalikan oleh kueriselect pg_backend_pid()untuk koneksi saat ini dapat berubah.Karena koneksi dapat digunakan kembali, alamat IP dan port yang ditampilkan di
pg_stat_activityatau Penjelajah SQL mungkin tidak sesuai dengan alamat IP dan port aktual klien.
Memilih kolam koneksi
Gunakan saran berikut untuk memutuskan apakah akan mengaktifkan pooling koneksi tingkat transaksi:
Jika aplikasi Anda menggunakan sejumlah kecil koneksi persisten atau sudah memiliki kolam koneksi yang efektif, Anda tidak perlu mengaktifkan fitur kolam koneksi PolarDB.
Jika aplikasi Anda menggunakan banyak koneksi (misalnya puluhan ribu) atau merupakan layanan arsitektur tanpa server di mana jumlah koneksi meningkat secara linear seiring dengan skala keluar server, Anda dapat mengaktifkan pooling koneksi tingkat transaksi. Sebelum mengaktifkan fitur ini, pastikan bahwa aplikasi Anda tidak terpengaruh oleh batasan yang dijelaskan dalam topik ini.