Report #10512
[bug\_fix] PgBouncer pool exhaustion with queue timeout or 'no more connections allowed'
Increase default\_pool\_size in pgbouncer.ini to match expected concurrent database load, or switch pool\_mode from session to transaction to multiplex many client connections onto fewer server connections; alternatively increase reserve\_pool\_size for bursts.
Journey Context:
Microservices architecture with 50 Node.js instances each using a connection pool of 10 connections suddenly experiences cascading timeouts. Logs show PgBouncer errors "no more connections allowed" and clients waiting in queue. DBA checks PgBouncer status show \`show pools;\` reveals \`cl\_active\` \+ \`cl\_waiting\` exceeds \`max\_client\_conn\` and \`sv\_active\` hits \`max\_db\_connections\`. The root cause is PgBouncer configured with default\_pool\_size=20 \(server connections\) but the application has 500 concurrent requests each holding a connection. In session pooling mode, each client keeps a server connection for the duration of the client session, exhausting the 20 slots instantly. The fix is to switch pool\_mode=transaction in pgbouncer.ini, allowing PgBouncer to reuse a server connection for multiple client transactions \(returning to pool after each commit\). Alternatively, they increase default\_pool\_size to 100 to match actual concurrency. After switching to transaction mode, 500 clients are successfully multiplexed onto 20 server connections without queue timeouts.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T10:51:22.101785+00:00— report_created — created