全部产品
Search
文档中心

PolarDB:Pool Koneksi

更新时间:Jul 03, 2025

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.1 untuk mengakses database_a tetapi tidak memberikan izin kepada user@192.xx.xx.2 untuk mengakses database_a, kesalahan izin mungkin terjadi ketika koneksi digunakan kembali.

  • Jika Anda sering mengeksekusi pernyataan COM_STATISTICS dalam 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 sesi2

    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, dan dbname. 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 transaksi1

    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 pernyataan SELECT SQL_CALC_FOUND_ROWS * FROM t1 LIMIT *. Metode ini tidak lagi direkomendasikan oleh MySQL open source. Anda dapat mengganti pernyataan SELECT FOUND_ROWS() dengan pernyataan SELECT COUNT(*) FROM tb1. Untuk informasi lebih lanjut, lihat FOUND_ROWS().

      • Anda dapat menambahkan pernyataan SELECT LAST_INSERT_ID() langsung setelah pernyataan INSERT untuk memastikan kebenaran hasil kueri.

    • Setelah Anda mengonfigurasi parameter wait_timeout untuk koneksi Anda, nilai parameter wait_timeout mungkin 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 parameter wait_timeout berlalu, 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, dan time_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(), ID thread yang berbeda mungkin dikembalikan untuk koneksi yang sama.

    • Koneksi mungkin digunakan kembali. Alamat IP dan nomor port dalam hasil pernyataan SHOW PROCESSLIST atau 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 thread dari 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.