Bagikan melalui


PgBouncer di Azure Database for PostgreSQL

Instans server fleksibel Azure Database for PostgreSQL menawarkan PgBouncer sebagai solusi pengumpulan koneksi bawaan. PgBouncer adalah fitur opsional yang dapat Anda aktifkan berdasarkan per database-server. Dukungan ini tersedia pada tingkat komputasi General Purpose dan Memory Optimized di jaringan akses publik dan akses privat.

PgBouncer berjalan pada komputer virtual (VM) yang sama dengan server database untuk instans server fleksibel Azure Database for PostgreSQL Anda. Postgres menggunakan model berbasis proses untuk koneksi, sehingga mempertahankan banyak koneksi menganggur menjadi mahal. Postgres mengalami batasan sumber daya saat server menjalankan lebih dari beberapa ribu koneksi. Keuntungan utama PgBouncer adalah untuk meningkatkan sambungan diam dan sambungan jangka pendek di server database.

PgBouncer menggunakan model ringan yang menggunakan I/O asinkron. Ini menggunakan koneksi Postgres hanya jika diperlukan - yaitu, saat berada di dalam transaksi terbuka atau saat kueri aktif. Model ini memungkinkan penskalakan hingga 10.000 koneksi dengan overhead rendah.

Versi PgBouncer yang disebarkan pada semua versi utama mesin yang didukung, di Azure Database for PostgreSQL, adalah 1.25.1. PgBouncer berjalan pada port 6432 di server database Anda. Anda dapat mengubah konfigurasi koneksi database aplikasi untuk menggunakan nama host yang sama, tetapi mengubah port menjadi 6432 untuk mulai menggunakan PgBouncer dan mendapat manfaat dari peningkatan penskalaan koneksi diam.

PgBouncer di Azure Database for PostgreSQL mendukung autentikasi Microsoft Entra (Microsoft Azure AD).

Mengaktifkan dan mengonfigurasi PgBouncer

PgBouncer sangat berguna dalam aplikasi transaksional di mana churn koneksi yang sering dapat menurunkan performa. Ini diaktifkan secara default pada port 6432, dan Anda dapat menyambungkannya dengan menggunakan nama host yang sama dengan server PostgreSQL Anda, tetapi dengan port 6432 alih-alih port default 5432.

Untuk mengaktifkan PgBouncer, buka panel Parameter server di portal Azure, cari PgBouncer, dan ubah pengaturan menjadi pgbouncer.enabled.true Tidak perlu menghidupkan ulang server.

Anda dapat mengonfigurasi pengaturan PgBouncer dengan menggunakan parameter ini.

Nota

Daftar parameter server PgBouncer berikut ini terlihat di panel Parameter server hanya jika pgbouncer.enabled parameter server diatur ke true. Jika tidak, mereka sengaja disembunyikan.

Nama Parameter Description Bawaan
pgbouncer.default_pool_size Atur nilai parameter ini ke jumlah koneksi per pengguna dan pasangan database. 50
pgbouncer.ignore_startup_parameters Masukkan daftar parameter yang dipisahkan koma yang dapat diabaikan PgBouncer. Misalnya, Anda dapat membiarkan PgBouncer mengabaikan extra_float_digits parameter. Beberapa parameter diizinkan; yang lain menimbulkan kesalahan. Kemampuan ini diperlukan untuk mentoleransi tindakan JDBC (Java Database Connectivity) yang terlalu bersemangat yang ingin mengatur extra_float_digits=2 tanpa syarat dalam paket startup. Gunakan opsi ini jika pustaka yang Anda gunakan melaporkan kesalahan seperti pq: unsupported startup parameter: extra_float_digits.
pgbouncer.max_client_conn Atur nilai parameter ini ke jumlah maksimum koneksi klien ke PgBouncer yang ingin Anda dukung. Defaultnya adalah 5.000, dengan rentang yang diizinkan dari 1 hingga 50.000. 5000
pgbouncer.max_prepared_statements Ketika nilai ini bukan nol, PgBouncer melacak perintah terkait pernyataan yang disiapkan pada tingkat protokol yang dikirim oleh klien dalam mode pengumpulan transaksi dan pernyataan. 0
pgbouncer.min_pool_size Tambahkan lebih banyak koneksi server ke kumpulan jika jumlah koneksi berada di bawah nilai ini. 0
pgbouncer.pool_mode Atur nilai parameter ini ke TRANSAKSI untuk pengelompokan transaksi (yang merupakan pengaturan yang disarankan untuk sebagian besar beban kerja). transaksi
pgbouncer.query_wait_timeout Waktu maksimum dalam detik yang boleh dihabiskan kueri menunggu eksekusi. Jika kueri tidak ditetapkan ke server dalam periode tersebut, klien akan terputus. 120
pgbouncer.server_idle_timeout Jika koneksi server menganggur selama lebih dari sekian detik ini, PgBouncer akan menghilangkan koneksi. Jika 0, batas waktu dinonaktifkan. 600
pgbouncer.stats_users Daftar pengguna database yang dipisahkan koma yang diizinkan untuk menyambungkan dan menjalankan kueri baca-saja di konsol pgBouncer.

Untuk informasi selengkapnya tentang konfigurasi PgBouncer, lihat dokumentasi pgbouncer.ini.

Keuntungan

Dengan menggunakan fitur PgBouncer bawaan dengan instans server fleksibel Azure Database for PostgreSQL, Anda mendapatkan manfaat berikut:

  • Kenyamanan konfigurasi yang disederhanakan: Karena PgBouncer terintegrasi dengan instans server fleksibel Azure Database for PostgreSQL, Anda tidak memerlukan penginstalan terpisah atau penyiapan kompleks. Anda dapat mengonfigurasinya langsung dari parameter server.

  • Keandalan layanan terkelola: PgBouncer menawarkan keuntungan dari layanan terkelola Azure. Misalnya, Azure mengelola pembaruan PgBouncer. Pembaruan otomatis menghilangkan kebutuhan akan pemeliharaan manual dan memastikan bahwa PgBouncer tetap up to date dengan fitur terbaru dan patch keamanan.

  • Dukungan untuk berbagai jenis koneksi: PgBouncer di Azure Database for PostgreSQL menyediakan dukungan untuk koneksi publik dan privat. Anda dapat menggunakannya untuk membuat koneksi aman melalui jaringan privat atau terhubung secara eksternal, tergantung pada persyaratan spesifik Anda.

  • Ketersediaan tinggi dalam skenario failover: Jika server siaga dipromosikan ke peran utama selama failover, PgBouncer memulai ulang dengan mulus pada siaga yang baru saja dipromosikan. Anda tidak perlu membuat perubahan apa pun pada aplikasi string koneksi. Kemampuan ini membantu memastikan ketersediaan berkelanjutan dan meminimalkan gangguan pada kumpulan koneksi aplikasi.

Memantau PgBouncer

Metrics

Anda dapat menggunakan metrik PgBouncer untuk memantau performa proses PgBouncer, termasuk detail untuk koneksi aktif, koneksi diam, total koneksi yang dikumpulkan, dan jumlah kumpulan koneksi. Setiap metrik dipancarkan pada interval 1 menit dan memiliki riwayat hingga 93 hari . Pelanggan dapat mengonfigurasi pemberitahuan pada metrik dan juga mengakses dimensi metrik baru untuk memisahkan dan memfilter data metrik berdasarkan nama database.

Cara mengaktifkan metrik PgBouncer

  • Untuk memantau metrik PgBouncer, pastikan bahwa fitur pgbouncer diaktifkan melalui parameter pgbouncer.enabled server dan parameter metrics.pgbouncer_diagnostics metrik diaktifkan.
  • Parameter ini bersifat dinamis dan tidak memerlukan mulai ulang instans.
  • Metrik PgBouncer dinonaktifkan secara default.

Daftar metrik PgBouncer

Nama tampilan ID metrik Unit Description Dimensi Default diaktifkan
Koneksi klien aktif client_connections_active Jumlah Koneksi dari klien yang terkait dengan koneksi server fleksibel di Azure Database for PostgreSQL. DatabaseName Tidak.
Menunggu koneksi dari klien client_connections_waiting Jumlah Koneksi dari klien yang menunggu koneksi server fleksibel Azure Database for PostgreSQL untuk melayaninya. DatabaseName Tidak.
Koneksi server aktif server_connections_active Jumlah Koneksi ke server fleksibel Azure Database for PostgreSQL yang sedang digunakan oleh koneksi klien. DatabaseName Tidak.
Koneksi server menganggur server_connections_idle Jumlah Koneksi ke server fleksibel Azure Database for PostgreSQL yang menganggur dan siap untuk melayani koneksi klien baru. DatabaseName Tidak.
Jumlah koneksi yang digabungkan total_pooled_connections Jumlah Jumlah koneksi terkelola secara gabungan saat ini. DatabaseName Tidak.
Jumlah kumpulan koneksi num_pools Jumlah Jumlah total kumpulan koneksi. DatabaseName Tidak.

Pertimbangan untuk menggunakan metrik PgBouncer

  • Metrik PgBouncer yang menggunakan dimensi DatabaseName memiliki batas 30 database .
  • Pada SKU Burstable , batasnya adalah 10 database yang memiliki dimensi DatabaseName.
  • Batas dimensi DatabaseName diterapkan ke kolom OID, yang mencerminkan urutan pembuatan untuk database.

Untuk informasi selengkapnya, lihat metrik PgBouncer.

Catatan

Server Fleksibel Azure Database for PostgreSQL menyediakan log PgBouncer untuk membantu Anda mengaudit aktivitas pengumpulan koneksi dan memecahkan masalah seperti penurunan koneksi, kegagalan autentikasi, atau kelelahan kumpulan. Log PgBouncer mencakup detail seperti kegagalan autentikasi, peristiwa siklus hidup koneksi, kesalahan, dan perubahan status server. Detail ini berguna untuk mengidentifikasi penyempitan koneksi dan anomali perilaku.

Mengaktifkan log

Aktifkan Pengaturan Diagnostik Log untuk menghasilkan log PgBouncer secara otomatis. Analitik Log mendukung dua jenis skema: Diagnostik Azure dan Spesifik Sumber Daya. Untuk informasi selengkapnya, lihat Skema umum dan khusus layanan untuk log sumber daya Azure.

  • Skema diagnostik Azure

    • Log muncul dalam AzureDiagnostics tabel.
    • Filter menggunakan: Category == "PostgreSQLFlexPGBouncer".
  • SkemaResource-Specific

    • Log muncul dalam PGSQLPgBouncer tabel.
    • Lebih mudah dikueri, format terstruktur.

Sampel kueri KQL

Skema diagnostik Azure:

AzureDiagnostics
| where Category == "PostgreSQLFlexPGBouncer"
| where LogicalServerName_s =~ "your-server-name"
| order by TimeGenerated desc

Skema Spesifik Sumber Daya:

PGSQLPgBouncer
| where _ResourceId =~ "your-server-name"
| order by TimeGenerated desc

Nota

Nama bidang dan format skema mungkin sedikit bervariasi tergantung pada skema yang digunakan (Konsolidasi vs Resource-Specific).

Konsol admin

PgBouncer juga menyediakan database internal yang disebut pgbouncer. Saat menyambungkan ke database tersebut, Anda dapat menjalankan SHOW perintah yang menyediakan informasi tentang status PgBouncer saat ini.

Untuk menyambungkan ke pgbouncer database:

  1. Atur pgBouncer.stats_users parameter ke nama pengguna yang ada (misalnya, myUser), dan terapkan perubahan.

  2. Sambungkan ke pgbouncer database sebagai pengguna ini dan atur port sebagai 6432:

    psql "host=myPgServer.postgres.database.azure.com port=6432 dbname=pgbouncer user=myUser password=<password> sslmode=require"
    

Setelah Anda tersambung ke database, gunakan SHOW perintah untuk melihat statistik PgBouncer:

  • SHOW HELP: Cantumkan semua perintah yang tersedia SHOW .
  • SHOW POOLS: Tampilkan jumlah koneksi di setiap status untuk setiap kumpulan.
  • SHOW DATABASES: Tampilkan batas koneksi yang diterapkan saat ini untuk setiap database.
  • SHOW STATS: Tampilkan statistik pada permintaan dan lalu lintas untuk setiap database.

Untuk informasi selengkapnya tentang perintah PgBouncer SHOW , lihat Konsol admin.

Mengalihkan aplikasi Anda untuk menggunakan PgBouncer

Untuk mulai menggunakan PgBouncer, ikuti langkah-langkah berikut:

  1. Sambungkan ke server database Anda, tetapi gunakan port 6432 alih-alih port reguler 5432. Verifikasi bahwa koneksi ini berfungsi.

    psql "host=myPgServer.postgres.database.azure.com port=6432 dbname=postgres user=myUser password=<password> sslmode=require"
    
  2. Uji aplikasi Anda di lingkungan QA terhadap PgBouncer, untuk memastikan Anda tidak memiliki masalah kompatibilitas. Proyek PgBouncer menyediakan matriks kompatibilitas, dan kami merekomendasikan pengumpulan transaksi untuk sebagian besar pengguna.

  3. Ubah aplikasi produksi Anda untuk menyambungkan ke port 6432 alih-alih 5432. Pantau kesalahan sisi aplikasi apa pun yang mungkin menunjuk ke masalah kompatibilitas.

PgBouncer dengan ketersediaan tinggi redundansi zona

Di server zona redundan dengan ketersediaan tinggi (HA), server utama menjalankan PgBouncer. Anda dapat terhubung ke PgBouncer di server utama melalui port 6432. Setelah failover, sistem memulai ulang PgBouncer pada siaga yang baru saja dipromosikan, yang sekarang berfungsi sebagai server utama. Jadi, string koneksi aplikasi Anda tetap sama setelah failover.

PgBouncer dengan kluster elastis

PgBouncer juga tersedia untuk kluster elastis. Setiap node dalam kluster elastis memiliki instans PgBouncer sendiri. Setelah Anda mengaktifkannya, port 6432 akan mengarahkan ke PgBouncer pada node koordinator cluster elastis. Selain itu, port 8432 mengarah ke instans PgBouncer yang berjalan pada simpul pekerja di kluster.

Keterbatasan

  • Fitur PgBouncer saat ini tidak mendukung tingkat komputasi server Burstable. Jika Anda mengubah tingkat komputasi dari Tujuan Umum atau Memori yang Dioptimalkan menjadi Burstable, Anda kehilangan kemampuan PgBouncer bawaan.
  • Setiap kali server dijalankan ulang selama operasi skala, HA failover, atau restart, sistem juga menjalankan ulang PgBouncer dan VM. Anda kemudian perlu membuat ulang koneksi yang ada.
  • Portal tidak menampilkan semua parameter PgBouncer. Setelah mengaktifkan PgBouncer dan menyimpan parameter, Anda perlu menutup panel Parameter server (misalnya, pilih Gambaran Umum) lalu kembali ke panel Parameter server untuk melihat semua parameter.
  • Anda tidak dapat menggunakan mode kumpulan pernyataan bersama dengan pernyataan yang disiapkan. Versi PgBouncer saat ini menambahkan dukungan untuk pernyataan yang disiapkan di dalam mode transaksi. Dukungan ini dapat diaktifkan dan dikonfigurasi melalui parameter max_prepared_statements. Mengatur parameter ini di atas nilai default 0 mengaktifkan dukungan untuk pernyataan yang disiapkan. Dukungan ini hanya berlaku untuk pernyataan yang disiapkan tingkat protokol. Untuk sebagian besar bahasa pemrograman, dukungan ini berarti bahwa aplikasi menggunakan fungsi libpqPQprepare pada klien, mengirim perintah tingkat protokol yang dapat disadap PgBouncer, daripada mengeluarkan perintah SQL dinamis yang mirip dengan PREPARE proc AS, yang mengirim teks yang tidak akan ditafsirkan PgBouncer dengan benar. Untuk memeriksa batasan lain dari mode kumpulan yang Anda pilih, lihat dokumentasi PgBouncer.
  • Jika Anda menyebarkan PgBouncer sebagai fitur, itu menjadi titik kegagalan tunggal potensial. Jika fitur PgBouncer tidak berfungsi, fitur ini dapat mengganggu seluruh kumpulan koneksi database dan menyebabkan waktu henti untuk aplikasi. Untuk mengurangi titik kegagalan tunggal, Anda dapat menyiapkan beberapa instans PgBouncer di belakang penyeimbang beban untuk memastikan ketersediaan tinggi di Mesin Virtual Azure.
  • PgBouncer adalah aplikasi ringan yang menggunakan arsitektur utas tunggal. Desain ini sangat bagus untuk sebagian besar beban kerja aplikasi. Tetapi dalam aplikasi yang membuat sejumlah besar koneksi berumur pendek, desain ini dapat memengaruhi performa PgBouncer dan membatasi kemampuan Anda untuk menskalakan aplikasi Anda. Anda mungkin perlu mencoba salah satu pendekatan ini:
    • Distribusikan beban koneksi di beberapa instans PgBouncer di Azure VM.
    • Pertimbangkan solusi alternatif, termasuk solusi multithreaded seperti PgCat, di Azure VM.

Penting

Parameter pgbouncer.client_tls_sslmode untuk fitur PgBouncer bawaan tidak digunakan lagi di Azure Database for PostgreSQL.

Saat Anda menerapkan TLS/SSL untuk koneksi ke instans server fleksibel Azure Database for PostgreSQL dengan mengatur require_secure_transport parameter server ke ON, TLS/SSL secara otomatis diberlakukan untuk koneksi ke fitur PgBouncer bawaan. Pengaturan ini aktif secara default saat Anda membuat instans server fleksibel Azure Database for PostgreSQL baru dan mengaktifkan fitur PgBouncer bawaan. Untuk informasi selengkapnya, lihat Mengamankan konektivitas dengan TLS di Azure Database for PostgreSQL.

Bagi pelanggan yang menginginkan manajemen yang disederhanakan, ketersediaan tinggi bawaan, konektivitas yang mudah dengan aplikasi dalam kontainer, dan kemampuan untuk menggunakan parameter konfigurasi paling populer, fitur PgBouncer bawaan adalah pilihan yang baik. Bagi pelanggan yang menginginkan skalabilitas multibenang, kontrol penuh atas semua parameter, dan pengalaman debugging, menyiapkan PgBouncer di VM Azure mungkin merupakan alternatif.