Connection pooling tái sử dụng một tập nhỏ các kết nối cơ sở dữ liệu cho nhiều request của client, thay vì mở một kết nối mới cho mỗi request. Các kết nối PostgreSQL tốn kém (mỗi kết nối là một tiến trình riêng dùng nhiều bộ nhớ), nên pooling là thiết yếu cho hiệu năng và khả năng mở rộng dưới tải. PgBouncer là pooler tiêu chuẩn.
Vấn đề: các kết nối PostgreSQL tốn kém
Mỗi kết nối PostgreSQL = một TIẾN TRÌNH OS riêng, dùng ~5-10MB bộ nhớ.
✗ Mở một kết nối có overhead (tạo tiến trình, xác thực, thiết lập)
✗ Nhiều kết nối (ví dụ hàng nghìn từ một app bận rộn) → dùng bộ nhớ khổng lồ, tranh chấp
✗ Postgres có giới hạn max_connections (thường ~100); vượt quá = lỗi
→ Mở/đóng một kết nối cho mỗi request, hoặc giữ hàng nghìn kết nối mở, không mở rộng được.
