Connection pooling يعيد استخدام مجموعة صغيرة من اتصالات قاعدة البيانات عبر العديد من طلبات العملاء، بدلاً من فتح اتصال جديد لكل طلب. اتصالات PostgreSQL مكلفة (كل واحد منها عملية منفصلة تستخدم ذاكرة كبيرة)، لذلك يعتبر pooling ضروريًا للأداء والقابلية للتوسع تحت الحمل. PgBouncer هو pooler القياسي.
المشكلة: اتصالات 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.
