PolarDB mendukung pool koneksi tingkat sesi dan pool koneksi tingkat transaksi. Anda dapat memilih jenis pool koneksi berdasarkan kebutuhan bisnis Anda. Pool koneksi membantu mengurangi overhead koneksi database dengan menghilangkan kebutuhan untuk membuat sejumlah besar koneksi secara berulang.
Catatan Penggunaan
Jika Anda memodifikasi pengaturan pool koneksi, pengaturan baru hanya akan berlaku pada koneksi yang dibuat setelah modifikasi. Untuk informasi tentang cara memodifikasi pengaturan pool koneksi, lihat Konfigurasikan PolarProxy.
Fitur pool koneksi tidak mendukung izin spesifik IP untuk sebuah akun. Jika Anda mengaktifkan fitur pooling koneksi dan memberikan izin akses pada basis data atau tabel kepada akun yang menggunakan alamat IP berbeda, kesalahan izin mungkin terjadi. Sebagai contoh, jika Anda memberikan izin kepada
user@192.xx.xx.1untuk mengaksesdatabase_atetapi tidak memberikan izin kepadauser@192.xx.xx.2untuk mengaksesdatabase_a, kesalahan izin mungkin terjadi ketika koneksi digunakan kembali.Jika Anda sering mengeksekusi pernyataan
COM_STATISTICSdalam bisnis Anda, kami menyarankan agar Anda tidak mengaktifkan fitur pool koneksi. Implementasi pernyataan ini pada basis data adalah untuk mengunci terlebih dahulu kemudian melintasi semua koneksi. Jika Anda mengaktifkan fitur pool koneksi, koneksi non-persisten diubah menjadi koneksi persisten. Ini dapat menyebabkan peningkatan jumlah koneksi persisten yang memicu hambatan dari pernyataan ini dan mengakibatkan penurunan performa. Kami menyarankan agar Anda tidak mengeksekusi pernyataan ini kecuali diperlukan. Eksekusi yang sering dapat menyebabkan penurunan performa yang serius dan memengaruhi waktu respons keseluruhan bisnis.Bagian ini menjelaskan fitur pool koneksi PolarProxy. Fitur ini tidak memengaruhi fitur pool koneksi aplikasi Anda. Jika aplikasi Anda mendukung pool koneksi, Anda tidak perlu menggunakan fitur pool koneksi PolarProxy.
Pool koneksi tingkat sesi
Cara kerja pool koneksi tingkat sesi

Koneksi singkat yang sering meningkatkan beban pada basis data. Pool koneksi tingkat sesi membantu mengurangi beban yang disebabkan oleh koneksi singkat yang sering. Ketika koneksi aplikasi Anda terputus, sistem memeriksa apakah koneksi tersebut menganggur. Jika koneksi menganggur, PolarProxy mempertahankan koneksi dalam pool koneksi untuk jangka waktu pendek. Ketika permintaan baru diterima, sistem menyediakan koneksi menganggur jika koneksi tersebut sesuai dengan kondisi yang ditentukan oleh parameter permintaan seperti
user,clientip, dandbname. Hal ini mengurangi overhead yang diperlukan untuk membuat koneksi baru ke basis data. Jika tidak ada koneksi menganggur dalam pool koneksi yang sesuai dengan kondisi, sistem membuat koneksi baru ke basis data.Batasan
Pool koneksi tingkat sesi tidak dapat digunakan untuk mengurangi jumlah koneksi bersamaan ke basis data. Pool koneksi tingkat sesi dapat digunakan untuk mengurangi frekuensi pembuatan koneksi dari aplikasi ke basis data. Dengan cara ini, jumlah utas utama yang dikonsumsi di MySQL berkurang dan performa layanan meningkat. Namun, koneksi menganggur dalam pool koneksi dihitung menuju batas keseluruhan jumlah koneksi yang diizinkan oleh basis data Anda.
Pool koneksi tingkat sesi tidak dapat menyelesaikan masalah koneksi tertunda yang disebabkan oleh sejumlah besar pernyataan SQL lambat. Untuk menyelesaikan masalah ini, kurangi jumlah pernyataan SQL lambat.
Pool koneksi tingkat transaksi
Cara kerja pool koneksi tingkat transaksi

Pool koneksi tingkat transaksi membantu mengurangi jumlah koneksi langsung ke basis data dan beban yang disebabkan oleh koneksi singkat yang sering.
Setelah fitur pool koneksi tingkat transaksi diaktifkan, Anda dapat membuat ribuan koneksi antara aplikasi dan PolarProxy. Namun, hanya puluhan atau ratusan koneksi yang dibuat antara PolarProxy dan basis data backend.
PolarProxy tidak membatasi jumlah koneksi. Jumlah maksimum koneksi ke titik akhir kluster PolarDB bervariasi berdasarkan spesifikasi node komputasi di basis data backend. Jika fitur pool koneksi tingkat transaksi dinonaktifkan, sistem harus membuat koneksi pada node utama dan setiap node baca-saja setiap kali aplikasi mengirim permintaan.
Setelah fitur pool koneksi tingkat transaksi diaktifkan, aplikasi yang mengirim permintaan pertama-tama terhubung ke PolarProxy. PolarProxy tidak segera membuat koneksi antara aplikasi dan basis data. PolarProxy memeriksa apakah ada koneksi menganggur dalam pool koneksi tingkat transaksi yang sesuai dengan kondisi yang ditentukan oleh parameter permintaan seperti
user,dbname, dan sistem. Jika tidak ada koneksi menganggur yang sesuai dengan kondisi, PolarProxy membuat koneksi baru ke basis data. Jika ada koneksi menganggur yang sesuai dengan kondisi, PolarProxy menggunakan kembali koneksi tersebut. Setelah transaksi berakhir, koneksi dilepaskan ke pool koneksi untuk permintaan lainnya.Batasan
Jika Anda melakukan salah satu operasi berikut, koneksi akan terkunci sampai koneksi ditutup. Koneksi yang terkunci tidak lagi dipertahankan dalam pool koneksi dan menjadi tidak tersedia untuk permintaan lainnya.
Eksekusi pernyataan PREPARE.
Membuat tabel sementara.
Memodifikasi variabel pengguna.
Menerima sejumlah besar entri log. Sebagai contoh, Anda dapat menerima entri log lebih dari 16 MB.
Menjalankan pernyataan LOCK TABLE.
Menjalankan beberapa pernyataan menggunakan satu string pernyataan.
Memanggil prosedur tersimpan.
Fungsi FOUND_ROWS, ROW_COUNT, dan LAST_INSERT_ID tidak didukung. Fungsi-fungsi tersebut dapat dipanggil, tetapi mungkin mengembalikan hasil yang tidak akurat.
Jika Anda menggunakan PolarProxy V1.13.11 atau lebih baru, Anda dapat menambahkan pernyataan
SELECT FOUND_ROWS()langsung setelah pernyataanSELECT SQL_CALC_FOUND_ROWS * FROM t1 LIMIT *. Metode ini tidak lagi direkomendasikan oleh MySQL open source. Anda dapat mengganti pernyataanSELECT FOUND_ROWS()dengan pernyataanSELECT COUNT(*) FROM tb1. Untuk informasi lebih lanjut, lihat FOUND_ROWS().Anda dapat menambahkan pernyataan
SELECT LAST_INSERT_ID()langsung setelah pernyataanINSERTuntuk memastikan kebenaran hasil kueri.
Setelah Anda mengonfigurasi parameter
wait_timeoutuntuk koneksi Anda, nilai parameterwait_timeoutmungkin tidak berlaku pada aplikasi Anda. Hal ini karena PolarProxy memilih koneksi dari pool koneksi setiap kali aplikasi Anda memulai permintaan. Ketika waktu yang ditentukan oleh parameterwait_timeoutberlalu, hanya koneksi ke basis data backend Anda yang ditutup. Koneksi ke aplikasi Anda dipertahankan.Pool koneksi mencocokkan permintaan ke koneksi menggunakan variabel
sql_mode,character_set_server,collation_server, dantime_zone. Jika permintaan bergantung pada variabel sistem tingkat sesi lainnya, Anda harus mengeksekusi pernyataan SET untuk menentukan variabel-variabel ini setelah koneksi dibuat. Jika tidak, pool koneksi mungkin menggunakan kembali koneksi yang variabel sistemnya telah diubah.Koneksi mungkin digunakan kembali. Setelah Anda mengeksekusi pernyataan
SELECT connection_id(), IDthreadyang berbeda mungkin dikembalikan untuk koneksi yang sama.Koneksi mungkin digunakan kembali. Alamat IP dan nomor port dalam hasil pernyataan
SHOW PROCESSLISTatau alamat IP dan nomor port yang ditampilkan di halaman SQL Explorer mungkin berbeda dari alamat IP dan nomor port aplikasi Anda.PolarProxy menggabungkan hasil pernyataan SHOW PROCESSLIST yang dieksekusi pada setiap node lalu mengembalikan hasil akhir ke klien. Setelah fitur pool koneksi tingkat transaksi diaktifkan, ID
threaddari koneksi antara klien dan PolarProxy berbeda dari ID thread dari koneksi antara PolarProxy dan basis data. Saat Anda menjalankan perintah KILL, pesan kesalahan ERROR 1094 (HY000): Unknown thread id: xxx dikembalikan.
Cara memilih pool koneksi
Anda dapat menentukan apakah akan mengaktifkan fitur pool koneksi dan memilih jenis pool koneksi berdasarkan rekomendasi berikut:
Bisnis Anda memerlukan sejumlah kecil koneksi dan sebagian besar koneksi yang diperlukan adalah koneksi persisten, atau pool koneksi yang sudah mapan tersedia untuk bisnis Anda. Dalam kasus ini, Anda tidak perlu mengaktifkan fitur pool koneksi PolarDB.
Layanan Anda memerlukan sejumlah besar koneksi seperti puluhan ribu koneksi, atau layanan Anda adalah layanan serverless yang koneksi-koneksinya meningkat secara linear berdasarkan skalabilitas vertikal atau horizontal server bisnis. Dalam kasus ini, Anda dapat mengaktifkan fitur pool koneksi tingkat transaksi jika layanan Anda tidak berjalan dalam skenario yang dijelaskan di bagian "Batasan" dari topik ini.
Layanan Anda hanya memerlukan koneksi singkat dan berjalan dalam skenario yang dijelaskan di bagian "Batasan" dari topik ini. Dalam kasus ini, Anda dapat mengaktifkan fitur pool koneksi tingkat sesi.