Part 3 · 1 chapters · ~8 min

Connection Poolers

Why poolers appear in every stack that grows, PgBouncer, PgCat and Supavisor for Postgres, ProxySQL for MySQL, RDS Proxy for serverless, and where the pooler sits (sidecar or central) for each runtime.

5

Poolers per runtime

runtimepooling insideusually paired with
Nodepg Pool or driver pool per processPgBouncer (transaction mode) once replicas multiply
Python / Djangopersistent connections per worker (CONN_MAX_AGE), psycopg poolPgBouncer: many Gunicorn workers × pods add up fast
RailsActiveRecord pool per process, sized to Puma threadsPgBouncer; Rails needs prepared statements off in older setups
Godatabase/sql pool (SetMaxOpenConns)often fine alone; PgBouncer at many replicas
JavaHikariCPoften fine alone (few JVMs); PgBouncer for many pods
serverless anythingnone that survives between invocationsRDS Proxy, Neon pooler, or an HTTP data API
MySQL appsdriver poolsProxySQL (pooling, read/write split, query rules)

The rule from the Scaling course applies to every language: total server connections = processes × pool size × replicas, and the database's useful concurrency is a small multiple of its cores.