Connection pooling réutilise un petit ensemble de connexions de base de données entre plusieurs requêtes client, au lieu d'ouvrir une nouvelle connexion par requête. Les connexions PostgreSQL sont coûteuses (chacune est un processus séparé utilisant une mémoire significative), donc le pooling est essentiel pour la performance et la scalabilité sous charge. PgBouncer est le pooler standard.
Le problème : les connexions PostgreSQL sont coûteuses
Each PostgreSQL connection = a separate OS PROCESS, using ~5-10MB of memory.
✗ Opening a connection has overhead (process creation, auth, setup)
✗ Many connections (e.g. 1000s from a busy app) → huge memory use, contention
✗ Postgres has a max_connections limit (often ~100); exceeding it = errors
→ Opening/closing a connection per request, or holding thousands open, doesn't scale.
