Report #17899
[bug\_fix] FATAL: sorry, too many clients already
Implement PgBouncer \(or similar pooler\) in transaction pooling mode; do not only raise max\_connections without adjusting kernel semaphores and shared\_buffers.
Journey Context:
You deploy a new microservice with 20 Gunicorn workers, each creating a direct psycopg2 connection. Suddenly, intermittent 500s appear. Logs show 'FATAL: sorry, too many clients already'. You check pg\_stat\_activity and see 100 idle connections. You realize the default max\_connections is 100. You consider raising it, but ops warns about shared\_buffers fragmentation and Linux semaphore limits \(/proc/sys/kernel/sem\). Instead, you install PgBouncer, switch the app to port 6432, set pool\_mode = transaction, and idle server connections drop to 10. The fix works because PgBouncer multiplexes many client connections over fewer actual Postgres backends, avoiding the hard process-per-connection limit.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T06:45:44.449913+00:00— report_created — created