Connection pooling reutiliza un pequeño conjunto de conexiones de base de datos entre muchas solicitudes de cliente, en lugar de abrir una nueva conexión por solicitud. Las conexiones de PostgreSQL son costosas (cada una es un proceso separado que usa memoria significativa), por lo que el pooling es esencial para el rendimiento y la escalabilidad bajo carga. PgBouncer es el pooler estándar.
El problema: las conexiones de PostgreSQL son costosas
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.
