Connection Pool Size Calculator
Work out how many database connections a pool needs from the database's cores, and check whether your app servers' workers exceed max_connections.
Free · No sign-up · Your inputs stay in your browser
Input
Size a database connection pool
Output
17 active connections
Pool size per instance
4
16 across 4 instances
Connections workers could open
64
Within the 97 the server accepts.
PgBouncer
max_client_conn = 100 default_pool_size = 17 pool_mode = transaction
Transaction pooling breaks session state: prepared statements (before PgBouncer 1.21), SET and advisory locks.
The (cores × 2) + spindles rule comes from the PostgreSQL wiki and HikariCP's pool-sizing notes: past that, extra connections queue for CPU and disk inside the database instead of in the pool, and throughput falls. Workers can outnumber connections, because most of a request is not spent in a query; a pooler such as PgBouncer in transaction mode lets them share.
Runs in this browser. Nothing you paste is sent to a server.
About this tool
Method, assumptions, practical next steps, and limits.
Smaller pools are faster
A database with 8 cores does not run 200 queries at once; extra connections wait for CPU and disk inside the server, where they also use memory (every PostgreSQL connection is a process). HikariCP's About Pool Sizing walks through measurements where shrinking the pool cut latency. Queue in the pool, not in the database.
When workers outnumber connections
PHP-FPM, Gunicorn and Puma workers each tend to hold a connection, so 10 servers with 50 workers want 500. A pooler in transaction mode lets them share a small number of real connections, as long as the application does not depend on session state between transactions.