Pooling Best Practices
Size connection pools from database capacity, not microservice replica count. Use this checklist when deploying PgBouncer in front of PostgreSQL 18.4.
Search across all documentation pages
Size connection pools from database capacity, not microservice replica count. Use this checklist when deploying PgBouncer in front of PostgreSQL 18.4.
cl_waiting before raising max_client_conn.pg_stat_activity snapshots.pods * pool_max.max_connections. Reserve admin/replication headroom.max_client_conn high enough for apps but bounded. Pooler is cheap; Postgres is not.server_reset_query = DISCARD ALL in transaction mode. Clear session state between checkouts.statement_timeout via ALTER ROLE defaults. Survives pooler resets.idle_in_transaction_session_timeout on app roles. Free server backends.lock_timeout on OLTP roles. Fail fast under migration contention.cl_waiting and connection errors. Page before user flood.pg_stat_activity.application_name for mystery connections. Map to pool aliases.Stack versions: This page was written for PostgreSQL 18.4 (stable 18, maintenance 17), pgvector 0.8+, PgBouncer 1.x, Patroni 3.x, and PostGIS 3.5+.
Reviewed by Chris St. John·Last updated Jul 19, 2026