Skip to main content

What Every Developer Should Know About Database Connection Pooling

Phil Eaton
Read the source ↗

Key takeaways

  • Each Postgres connection is a process on the server — hundreds of idle connections cost real memory and context-switch time, not just a connection count.
  • Pooler placement matters: client-side pools (app-level) and server-side poolers (PgBouncer) solve different problems; you usually want both at scale.
  • In transaction pooling mode, session-level features (prepared statements, SET, advisory locks) break silently — the classic “works until PgBouncer” bug class.
  • Pool saturation shows up as latency spikes long before errors. Alert on wait time, not just pool size.