Connection Pooling verwendet eine kleine Menge von Datenbankverbindungen, die über viele Client-Anfragen hinweg wiederverwendet werden, anstatt pro Anfrage eine neue Verbindung zu öffnen. PostgreSQL-Verbindungen sind teuer (jede ist ein separater Prozess mit erheblichem Speicherverbrauch), daher ist Pooling für Performance und Skalierbarkeit unter Last essentiell. PgBouncer ist der Standard-Pooler.
Das Problem: PostgreSQL-Verbindungen sind teuer
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.
