Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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.enabledserver dan parametermetrics.pgbouncer_diagnosticsmetrik 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
AzureDiagnosticstabel. - Filter menggunakan:
Category == "PostgreSQLFlexPGBouncer".
- Log muncul dalam
SkemaResource-Specific
- Log muncul dalam
PGSQLPgBouncertabel. - Lebih mudah dikueri, format terstruktur.
- Log muncul dalam
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:
Atur
pgBouncer.stats_usersparameter ke nama pengguna yang ada (misalnya,myUser), dan terapkan perubahan.Sambungkan ke
pgbouncerdatabase sebagai pengguna ini dan atur port sebagai6432: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 tersediaSHOW. -
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:
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"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.
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.