Pengumpulan Koneksi: PgBouncer
Jalankan PgBouncer dalam mode pengumpulan berdasarkan transaksi, tentukan ukuran kumpulan dengan tepat, dan hindari jebakan pernyataan tersiapkan
Pengumpulan Koneksi: PgBouncer adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Academy mencakup 4 pelajaran total.
Mengapa Menggunakan Pool Koneksi
Setiap koneksi Postgres adalah proses OS terpisah — membutuhkan banyak memori dan CPU. Aplikasi yang membuka dan menutup koneksi untuk setiap permintaan akan segera menghabiskan kapasitas server. Pengumpulan koneksi menggunakan kembali sejumlah kecil koneksi yang berumur panjang.
Biaya per Koneksi
Proses backend Postgres biasanya menggunakan RAM sebesar 5–10 MB. 500 koneksi = sekitar 5 GB RAM hanya untuk proses backend. PgBouncer dapat memultiplekskan ribuan klien ke dalam 50 koneksi backend.
Tiga Mode Pengumpulan Koneksi
- Sesi — klien mendapatkan koneksi khusus selama seluruh sesi
- Transaksi — klien mendapatkan koneksi untuk setiap transaksi
- Pernyataan — satu koneksi untuk setiap pernyataan (jarang digunakan)
Mode Transaksi (Disarankan)
Setiap transaksi mendapatkan koneksi server. Klien yang sama dapat menggunakan koneksi yang berbeda pada transaksi yang berbeda.
# pgbouncer.ini
[databases]
mydb = host=primary port=5432 dbname=mydb
[pgbouncer]
pool_mode = transaction
listen_port = 6432
max_client_conn = 1000
default_pool_size = 50Batasan Mode Transaksi
Fitur yang memerlukan status sesi tidak berfungsi:
- Pernyataan ter-preparasi (memerlukan backend yang sama pada setiap panggilan)
- SET LOCAL ... (berlaku per transaksi; SET ... yang tetap berlaku di antara transaksi tidak didukung)
- LISTEN / NOTIFY (memerlukan koneksi yang persisten)
- Kursor yang bertahan melewati transaksi
Mode Sesi
Gunakan ketika mode transaksi menyebabkan aplikasi Anda tidak berfungsi — tetapi jumlah klien serentak yang dapat dilayani lebih sedikit.
Menentukan Ukuran Pool
Aturan praktis: default_pool_size ≈ vCPU count × 2 + spindles. Terlalu tinggi = pergantian konteks menurunkan kapasitas pemrosesan; terlalu rendah = menunggu kumpulan koneksi.
PgBouncer di Depan HAProxy
Tumpukan produksi yang umum:
App → HAProxy (read/write routing) → PgBouncer (pooling) → Postgres
Pernyataan Ter-preparasi dalam Mode Transaksi
PgBouncer terbaru (1.21+) mendukung pernyataan ter-preparasi pada tingkat protokol dalam mode transaksi. Versi yang lebih lama: gunakan kueri sederhana atau mode sesi.
Memantau PgBouncer
Hubungkan ke basis data admin (basis data khusus):
psql -p 6432 -U pgbouncer pgbouncer
-- Commands:
SHOW STATS;
SHOW POOLS;
SHOW CLIENTS;
SHOW SERVERS;Alternatif
- pgpool-II — pengumpulan koneksi + penyeimbangan beban + penulisan ulang kueri
- Odyssey — pengelola pool milik Yandex, dengan banyak utas
- Pool di sisi pengandar — biasanya digabungkan dengan PgBouncer untuk pengumpulan koneksi di seluruh cluster
Pool Aplikasi + PgBouncer
Aplikasi biasanya menjalankan pool koneksinya sendiri (HikariCP, pgxpool) DAN melewati PgBouncer. Pengumpulan koneksi dua lapis — pool aplikasi mempertahankan koneksi ke perantara; perantara memultiplekskannya ke Postgres.
Ringkasan
PgBouncer penting untuk skala apa pun yang berarti.
- Mode transaksi adalah standar
- Waspadai pernyataan ter-preparasi / SET / LISTEN
- Ukuran pool sekitar vCPU × 2
- Pantau dengan SHOW POOLS
Pemeriksaan Singkat
Mode PgBouncer mana yang memultiplekskan klien terbanyak dengan koneksi server paling sedikit?
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pengumpulan Koneksi: PgBouncer” gratis?
Ya — teks lengkap “Pengumpulan Koneksi: PgBouncer” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Academy, upgrade ke CoddyKit PRO. Kursus SQL Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pengumpulan Koneksi: PgBouncer”?
Jalankan PgBouncer dalam mode pengumpulan berdasarkan transaksi, tentukan ukuran kumpulan dengan tepat, dan hindari jebakan pernyataan tersiapkan Kamu berlatih SQL Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai SQL Academy?
Tidak diperlukan pengalaman sebelumnya. SQL Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Pengumpulan Koneksi: PgBouncer” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Academy ini?
Ya. Setiap pelajaran SQL Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- pg_stat_statements: Kueri Teratas
- pgBadger untuk Analisis Log
- Pengumpulan Koneksi: PgBouncer
- Perencanaan Kapasitas dan Audit Bloat