Connection pooling reutilizează un set mic de conexiuni la baza de date pe mai multe cereri ale clienților, în loc să deschidă o nouă conexiune per cerere. Conexiunile PostgreSQL sunt scumpe (fiecare este un proces separat care folosește memorie semnificativă), deci pooling-ul este esențial pentru performanță și scalabilitate sub sarcină. PgBouncer este pooler-ul standard.
Problema: conexiunile PostgreSQL sunt scumpe
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.
