Connection pooling επαναχρησιμοποιεί ένα μικρό σύνολο database connections σε πολλά client requests, αντί να ανοίγει μια νέα σύνδεση ανά request. Οι PostgreSQL connections είναι ακριβές (κάθε μία είναι μια ξεχωριστή διεργασία που χρησιμοποιεί σημαντική μνήμη), επομένως το pooling είναι απαραίτητο για performance και scalability υπό φορτίο. PgBouncer είναι το standard pooler.
Το πρόβλημα: PostgreSQL connections είναι ακριβές
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.
