DBAtlas · Veritabanı operasyon atlası

PgBouncer pool_mode seçimi ve temel boyutlandırma

PostgreSQLPgBouncer

Komut

; /etc/pgbouncer/pgbouncer.ini
[databases]
appdb = host=<primary_host> port=5432 dbname=appdb pool_mode=transaction
reportdb = host=<primary_host> port=5432 dbname=appdb pool_mode=session

[pgbouncer]
listen_addr = 0.0.0.0
listen_port = 6432
auth_type = scram-sha-256
auth_file = /etc/pgbouncer/userlist.txt
pool_mode = transaction
max_client_conn = 5000
default_pool_size = 20
reserve_pool_size = 5
max_prepared_statements = 200
query_wait_timeout = 120

Ne yapar?

session modu istemciyi bağlantı boyunca tek sunucu bağlantısına bağlar; transaction modu sunucu bağlantısını yalnızca transaction süresince verir ve binlerce istemciyi onlarca PostgreSQL bağlantısıyla taşır; statement modu her sorgudan sonra bağlantıyı geri alır ve çok-sorgulu transaction'a izin vermez. pool_mode database bazında da ezilebilir.

Ne zaman kullanılır?

Çok sayıda kısa ömürlü bağlantı açan OLTP/mikroservis uygulamalarında transaction modu; oturum durumuna bağımlı işler (raporlama, migration, LISTEN kullanan servisler) için session modu.

Dikkat

Transaction modunda oturum durumu transaction'lar arasında korunmaz: SET (SET LOCAL hariç), oturum seviyesi advisory lock, LISTEN, WITH HOLD cursor, transaction'lar arası temp table ve SQL düzeyinde PREPARE güvenilmezdir. Protokol düzeyindeki prepared statement'lar yalnızca PgBouncer 1.21+ ve max_prepared_statements > 0 ile desteklenir (1.24+'ta varsayılan 200, öncesinde 0). default_pool_size × (database, user) çifti sayısı PostgreSQL max_connections'ı (superuser_reserved_connections payı düşülerek) aşmamalı.

DBAtlas'ta aç →

İlgili