max_connections değerini artırmak ilk akla gelen çözümdür ama çoğu zaman sorunu büyütür. Her bağlantı bellek tüketir ve PostgreSQL süreç başına bir bağlantı modeli kullanır.
Neden max_connections çözüm değil?
Binlerce boşta bağlantı, bağlam değiştirme ve bellek baskısıyla veritabanını yavaşlatır. Asıl ihtiyaç, uygulama ile veritabanı arasında bir havuzlama katmanıdır.
Havuzlama modları
Session, transaction ve statement
Transaction modu en yaygın kullanılanıdır ve en yüksek verimi sağlar; ancak oturum düzeyi özellikleri (prepared statement, advisory lock) kullanan uygulamalarda sessiz hatalara yol açabilir.
Ne zaman gerekir?
Kısa ömürlü çok sayıda bağlantı açan web uygulamalarında pgBouncer neredeyse her zaman kazandırır. Az sayıda uzun ömürlü worker kullanıyorsanız fayda sınırlıdır.