Connection pooling นำชุด connection ฐานข้อมูลขนาดเล็กกลับมาใช้ใหม่ข้าม client request จำนวนมาก แทนที่จะเปิด connection ใหม่ต่อ request connection ของ PostgreSQL มีต้นทุนสูง (แต่ละตัวเป็น process แยกที่ใช้หน่วยความจำมาก) ดังนั้น pooling จึงจำเป็นต่อประสิทธิภาพและความสามารถในการขยายภายใต้ load PgBouncer เป็น pooler มาตรฐาน
ปัญหา: connection ของ PostgreSQL มีต้นทุนสูง
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.
