全部产品
Search
文档中心

ApsaraDB RDS:Konfigurasikan fitur kolam koneksi

更新时间:Jul 02, 2025

Jika aplikasi Anda sering membuat koneksi singkat ke instans ApsaraDB RDS for MySQL atau jumlah maksimum koneksi yang diizinkan tercapai, gunakan fitur kolam koneksi dari database proxy. Fitur ini mengurangi frekuensi koneksi aplikasi ke instans RDS, overhead utama thread instans RDS, serta jumlah total koneksi ke instans RDS.

Pilih jenis kolam koneksi

ApsaraDB RDS for MySQL mendukung pooling koneksi tingkat transaksi dan pooling koneksi tingkat sesi. Pilih jenis pooling koneksi berdasarkan kebutuhan bisnis Anda.

Jenis

Skenario

Pooling koneksi tingkat transaksi (direkomendasikan)

Koneksi singkat diperlukan dalam beban kerja, koneksi sering dibuat, dan jumlah koneksi mencapai jumlah maksimum koneksi yang didukung oleh instans RDS.

Batasan pada pooling koneksi tingkat transaksi tidak memengaruhi beban kerja Anda. Untuk informasi lebih lanjut, lihat Batasan kolam koneksi transaksi.

Pooling koneksi tingkat sesi

Koneksi singkat diperlukan dalam beban kerja, dan koneksi sering dibuat. Namun, batasan pada pooling koneksi tingkat transaksi memengaruhi beban kerja Anda.

Pooling koneksi dinonaktifkan

Koneksi persisten diperlukan dalam beban kerja, sejumlah kecil koneksi dibuat, dan kolam koneksi seperti Druid, DBCP, c3p0, dan HikariCP digunakan dalam aplikasi Anda.

Pengenalan jenis kolam koneksi

Pooling koneksi tingkat transaksi (direkomendasikan)

Skenario

  • Beban kerja memerlukan banyak koneksi singkat.

  • Koneksi sering dibuat.

  • Jumlah koneksi mencapai batas maksimum yang didukung oleh instans RDS.

Manfaat

  • Mengurangi frekuensi koneksi aplikasi ke instans RDS dan overhead utama thread instans RDS.

  • Mengurangi jumlah total koneksi ke instans RDS.

Cara kerja

Saat pooling koneksi tingkat transaksi diaktifkan, klien terhubung ke database proxy saat memulai permintaan. Database proxy tidak langsung membuat koneksi backend ke database. Saat permintaan perlu diproses, database proxy mencari kolam koneksi untuk koneksi backend yang tersedia.

Catatan

Jika nilai parameter user dan dbname sama dengan nilai variabel sistem tertentu, koneksi dianggap tersedia.

  • Jika koneksi backend tersedia, koneksi tersebut digunakan. Setelah transaksi selesai, koneksi direklaim oleh kolam koneksi.

  • Jika tidak ada koneksi backend tersedia, koneksi backend baru dibuat.

Pooling koneksi tingkat transaksi memungkinkan beberapa sesi berbagi satu koneksi backend. Koneksi dengan transaksi aktif menempati koneksi backend, sedangkan koneksi dengan transaksi tidak aktif tidak menempati koneksi backend.

Selama periode waktu tertentu, koneksi backend yang sama dapat memproses transaksi dalam beberapa sesi berlangsung. Ini memberikan manfaat sebagai berikut:

  • Frekuensi koneksi ke database berkurang.

    Koneksi backend tetap hidup selama periode waktu tertentu untuk mengurangi frekuensi koneksi dan overhead utama thread database.

  • Jumlah total koneksi ke database berkurang.

    Beberapa sesi berlangsung berbagi koneksi backend. Ini mencegah koneksi idle menempati sumber daya koneksi backend dan mengurangi jumlah total koneksi ke database. Dalam koneksi idle, koneksi frontend menjadi tidak aktif ketika sesi tidak diakhiri.

Catatan

Fitur database proxy tidak membatasi jumlah maksimum koneksi. Jumlahnya bervariasi berdasarkan spesifikasi instans RDS Anda.

Batasan

  • Saat melakukan salah satu operasi berikut, koneksi dikunci hingga ditutup. Ini berarti koneksi tidak dapat direklaim oleh kolam koneksinya.

    • Eksekusi pernyataan PREPARE.

    • Buat tabel sementara.

    • Ubah variabel pengguna.

    • Proses paket besar, seperti paket 16 MB atau ukuran lebih besar.

    • Eksekusi pernyataan LOCK TABLE.

    • Jalankan kueri multi-pernyataan.

    • Panggil prosedur tersimpan.

  • Fungsi FOUND_ROWS, ROW_COUNT, dan LAST_INSERT_ID tidak didukung. Anda dapat memanggil fungsi-fungsi ini, tetapi hasil yang dikembalikan mungkin tidak akurat.

    • Jika versi database proxy yang digunakan adalah V1.13.11 atau lebih baru, Anda dapat mengeksekusi pernyataan SELECT FOUND_ROWS() setelah pernyataan SELECT SQL_CALC_FOUND_ROWS * FROM t1 LIMIT *. Metode ini tidak lagi direkomendasikan oleh open source MySQL. Sebagai alternatif, ganti pernyataan SELECT FOUND_ROWS() dengan pernyataan SELECT COUNT(*) FROM tb1. Untuk informasi lebih lanjut, lihat FOUND_ROWS().

    • Jika versi database proxy yang digunakan adalah V1.13.11 atau lebih baru, Anda dapat mengeksekusi pernyataan SELECT LAST_INSERT_ID() setelah pernyataan INSERT. Ini memastikan akurasi hasil kueri.

Catatan penggunaan

  • Jika Anda mengonfigurasi parameter wait_timeout, nilai parameter wait_timeout mungkin tidak berlaku untuk klien Anda. Hal ini karena database proxy memilih koneksi dari kolam koneksi setiap kali klien memulai permintaan. Ketika waktu yang ditentukan oleh parameter wait_timeout berakhir, hanya koneksi backend yang ditutup, sementara koneksi ke klien tetap terbuka.

  • Pooling koneksi tingkat transaksi mencocokkan variabel berikut dalam permintaan: sql_mode, character_set_server, collation_server, dan time_zone. Jika permintaan mencakup variabel sistem tingkat sesi lainnya, Anda harus secara eksplisit mengeksekusi pernyataan SET pada klien untuk mengonfigurasi variabel ini setelah koneksi dibuat untuk permintaan. Jika tidak, koneksi yang variabel sistemnya dikonfigurasi ulang mungkin dipilih dari kolam koneksi dan digunakan kembali.

  • Anda dapat mengeksekusi pernyataan SELECT CONNECTION_ID() untuk memeriksa ID thread koneksi guna menentukan apakah koneksi digunakan kembali.

  • Jika koneksi yang ada digunakan kembali, alamat IP dan nomor port yang dikembalikan oleh pernyataan SHOW PROCESSLIST atau fitur Penjelajah SQL dan Audit mungkin berbeda dari alamat IP dan nomor port aktual klien Anda. Untuk informasi lebih lanjut, lihat Gunakan Fitur Penjelajah SQL dan Audit.

  • Database proxy menggabungkan hasil yang diperoleh oleh pernyataan SHOW PROCESSLIST dari semua instans RDS utama, sekunder, dan hanya-baca. Kemudian, database proxy mengembalikan set hasil ke aplikasi Anda. Jika Anda mengaktifkan pooling koneksi tingkat transaksi, ID thread koneksi frontend berbeda dari ID thread koneksi backend. Akibatnya, kesalahan mungkin dikembalikan untuk perintah kill meskipun proses berhasil dihentikan. Dalam hal ini, Anda dapat mengeksekusi pernyataan SHOW PROCESSLIST statement lagi untuk memeriksa apakah proses dihentikan.

Pooling koneksi tingkat sesi

Skenario

  • Beban kerja memerlukan banyak koneksi singkat.

  • Koneksi sering dibuat.

Manfaat

Pooling koneksi tingkat sesi mengurangi frekuensi koneksi aplikasi ke instans RDS dan overhead utama thread instans RDS.

Cara kerja

Koneksi Frontend dan Koneksi Backend

Koneksi antara klien dan database dibagi oleh database proxy menjadi dua bagian: koneksi frontend dan koneksi backend. Koneksi frontend mengacu pada koneksi antara klien dan database proxy. Koneksi backend mengacu pada koneksi antara database proxy dan database. Klien bisa berupa aplikasi.

Pembuatan Koneksi dengan Pooling Koneksi Dinonaktifkan

Jika pooling koneksi dinonaktifkan, koneksi frontend dan koneksi backend harus dibuat untuk setiap sesi yang dimulai oleh klien. Ini meningkatkan overhead utama thread database.

Cara Kerja Pooling Koneksi Tingkat Sesi

Jika Anda mengaktifkan pooling koneksi tingkat sesi, koneksi frontend dibuat saat klien memulai sesi. Lalu, sistem mencari kolam koneksi untuk koneksi backend yang tersedia.

Catatan

Jika nilai parameter user, clientip, dan dbname dari koneksi backend cocok, koneksi backend dianggap tersedia.

  • Jika koneksi backend tersedia, koneksi tersebut digunakan.

  • Jika tidak ada koneksi backend tersedia, koneksi backend baru dibuat.

Setelah sesi berakhir, koneksi frontend ditutup dan koneksi backend direklaim oleh kolam koneksi. Saat sesi baru dimulai, koneksi backend dapat langsung digunakan. Ini mengurangi overhead utama thread database.

Gambar berikut menunjukkan proses pembuatan koneksi.

Jika Anda menggunakan pooling koneksi tingkat sesi, satu sesi menempati satu koneksi backend. Koneksi backend direklaim oleh kolam koneksi hanya setelah sesi berakhir.

Batasan

Tidak ada.

Catatan penggunaan

Sebelum sesi berakhir, koneksi backend dari sesi tidak dapat digunakan oleh sesi lain bahkan jika sesi idle dan tidak ada transaksi yang perlu diproses. Akibatnya, jumlah total koneksi ke database tidak berkurang.

Konfigurasikan fitur kolam koneksi

Prasyarat

Fitur database proxy diaktifkan. Untuk informasi lebih lanjut, lihat Aktifkan Fitur Database Proxy.

Catatan penggunaan

  • Fitur kolam koneksi tidak mendukung izin berbasis IP untuk akun. Jika Anda mengaktifkan fitur kolam koneksi dan memberikan izin akses pada database atau tabel kepada akun yang menggunakan alamat IP berbeda, kesalahan izin mungkin terjadi. Misalnya, akun memiliki izin pada database_a saat masuk dari alamat IP 192.xx.xx.1, tetapi akun tidak memiliki izin pada database_a saat masuk dari alamat IP 192.xx.xx.2. Dalam hal ini, kesalahan izin mungkin terjadi saat koneksi yang ada digunakan kembali.

  • Fitur kolam koneksi yang disediakan dalam database proxy sistem database Anda tidak memengaruhi kolam koneksi yang disediakan dalam aplikasi Anda. Jika aplikasi Anda menyediakan kolam koneksi, Anda tidak perlu mengaktifkan fitur kolam koneksi untuk sistem database Anda.

  • Fitur kolam koneksi tidak dapat menyelesaikan masalah akumulasi koneksi yang disebabkan oleh sejumlah besar kueri SQL lambat. Kami merekomendasikan agar Anda mengoptimalkan pernyataan SQL terkait atau menangani masalah pada instans RDS.

  • Jika versi database proxy lebih awal dari 2.9.1, Anda tidak dapat mengonfigurasi kolam koneksi untuk titik akhir proxy database yang memiliki atribut hanya-baca. Jika versi database proxy adalah 2.9.1 atau lebih baru, Anda dapat mengonfigurasi kolam koneksi untuk titik akhir proxy database yang memiliki atribut baca/tulis atau hanya-baca.

Prosedur

  1. Pergi ke halaman Instans. Di bilah navigasi atas, pilih wilayah tempat instans RDS berada. Lalu, temukan instans RDS dan klik ID instans tersebut.

  2. Di panel navigasi sisi kiri, klik Database Proxy.

  3. Di bagian Connection Information, aktifkan fitur kolam koneksi dengan salah satu metode berikut:

    Catatan
    • Secara default, fitur kolam koneksi dinonaktifkan.

    • Setelah jenis kolam koneksi diubah, modifikasi hanya berlaku untuk koneksi baru.

    • Metode 1: Gerakkan pointer ke ikon image.png di sebelah kanan titik akhir proxy database yang ingin Anda konfigurasikan untuk kolam koneksi. Di kotak dialog yang muncul, klik Enable Transaction-level Connection Pooling atau Enable Session-level Connection Pooling. Di kotak dialog yang muncul, klik OK.

      image.png

    • Metode 2: Temukan titik akhir proxy database yang ingin Anda konfigurasikan untuk kolam koneksi dan klik Modify Configuration di kolom Actions. Di kotak dialog yang muncul, pilih jenis kolam koneksi yang diperlukan di sebelah kanan Connection Pooling.

      Catatan

      Jika fitur kolam koneksi diaktifkan, Anda dapat mengubah jenis kolam koneksi.

      image.png

Operasi terkait

Operasi

Deskripsi

DescribeDBProxy

Mengkueri detail tentang proxy khusus instans ApsaraDB RDS.

DescribeDBProxyEndpoint

Mengkueri informasi tentang titik akhir proxy database.

ModifyDBProxyEndpoint

Memodifikasi pengaturan koneksi untuk titik akhir proxy database.

Istilah

  • Koneksi singkat: koneksi yang hanya terbuka selama periode waktu singkat. Sebagai contoh, koneksi dibuat untuk aplikasi PHP guna mengeksekusi query sederhana, lalu ditutup. Keuntungannya adalah sumber daya koneksi tidak ditempati dalam jangka waktu lama. Kerugiannya adalah koneksi harus dibuat setiap kali klien memulai permintaan, sehingga meningkatkan overhead utas utama dari database Anda.

  • Koneksi persisten: koneksi yang tetap terbuka untuk jangka waktu panjang. Sebagai contoh, server web atau server aplikasi membuka beberapa koneksi ke server MySQL dan mempertahankannya tetap terbuka hingga server web atau server aplikasi dihentikan. Keuntungannya adalah koneksi dibuat dengan frekuensi lebih rendah, sehingga mengurangi overhead utama thread. Namun, kerugiannya adalah sumber daya koneksi tetap digunakan dalam jangka waktu panjang.

FAQ

Berapa jumlah maksimum koneksi untuk mengaktifkan fitur kolam koneksi?

Jika jumlah koneksi mungkin melebihi jumlah maksimum koneksi yang didukung oleh instans RDS Anda, kami merekomendasikan agar Anda mengaktifkan pooling koneksi tingkat transaksi.

Berapa lama koneksi dalam kolam koneksi dapat tetap hidup?

Koneksi dalam kolam koneksi dapat tetap hidup selama 10 detik.

Apakah fitur kolam koneksi memengaruhi performa instans?

Setelah fitur kolam koneksi diaktifkan, performa instans meningkat sekitar 10% dalam skenario koneksi singkat.

Apa perbedaan antara pooling koneksi tingkat transaksi dan pooling koneksi tingkat sesi?

Pooling koneksi tingkat transaksi tidak hanya mengurangi overhead utama thread instans RDS, tetapi juga mengurangi jumlah total koneksi ke instans RDS.

Pooling koneksi tingkat sesi hanya dapat mengurangi overhead utama thread instans RDS, tetapi tidak dapat mengurangi jumlah total koneksi ke instans RDS.

Bagaimana cara kerja pooling koneksi tingkat transaksi berbeda dari pooling koneksi tingkat sesi?

Jenis

Sesi berbagi koneksi backend

Waktu penggunaan koneksi backend

Waktu pengambilan kembali koneksi backend

Pemetaan antara sesi dan koneksi backend

Pooling koneksi tingkat transaksi

Ya

Transaksi sedang diproses.

Transaksi selesai. Sesi mungkin belum berakhir.

N:1

Pooling koneksi tingkat sesi

Tidak

Sesi sedang dibuat.

Sesi berakhir.

N:N

Database proxy terputus dari aplikasi saya. Apakah pemutusan ini terjadi karena baik aplikasi maupun database proxy menggunakan fitur kolam koneksi?

Penyebab pemutusan bervariasi berdasarkan kondisi aktual. Tidak selalu disebabkan oleh aplikasi dan database proxy menggunakan fitur kolam koneksi.