تجميع الاتصالات: PgBouncer
شغّل PgBouncer في وضع تجميع المعاملات، واضبط أحجام التجمعات بصورة صحيحة، وتجنب مشكلة العبارات المُعدّة
تجميع الاتصالات: PgBouncer درس مجاني في SQL Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Academy 4 دروس في المجموع.
لماذا نستخدم تجميع الاتصالات؟
كل اتصال بـ Postgres هو عملية منفصلة في نظام التشغيل، ويستهلك قدرًا كبيرًا من الذاكرة ووحدة المعالجة المركزية. تستنفد التطبيقات التي تفتح الاتصالات وتغلقها مع كل طلب موارد الخادم بسرعة. ويعيد تجميع الاتصالات استخدام مجموعة صغيرة من الاتصالات طويلة الأجل.
تكلفة كل اتصال
تستخدم عملية Postgres الخلفية النموذجية من 5 إلى 10 ميغابايت من RAM. ويعني وجود 500 اتصال استهلاك نحو 5 غيغابايت من RAM للعمليات الخلفية وحدها. ويمكن لـ PgBouncer توزيع آلاف العملاء على 50 اتصالًا خلفيًا.
أوضاع تجميع الاتصالات الثلاثة
- الجلسة — يحصل العميل على اتصال مخصص طوال الجلسة
- المعاملة — يحصل العميل على اتصال لكل معاملة
- العبارة — اتصال لكل عبارة، ويُستخدم هذا الوضع نادرًا
وضع المعاملة (موصى به)
تحصل كل معاملة على اتصال بخادم. وقد يستخدم العميل نفسه اتصالات مختلفة عبر المعاملات المختلفة.
# pgbouncer.ini
[databases]
mydb = host=primary port=5432 dbname=mydb
[pgbouncer]
pool_mode = transaction
listen_port = 6432
max_client_conn = 1000
default_pool_size = 50تنبيهات وضع المعاملة
تتعطل الميزات التي تتطلب حالة الجلسة:
- العبارات المُعدّة، إذ تتطلب استخدام الخادم الخلفي نفسه عبر الاستدعاءات
- SET LOCAL ...، إذ يكون استخدامها لكل معاملة مناسبًا، بينما لا يكون SET ... الذي يستمر عبر المعاملات مناسبًا
- LISTEN / NOTIFY، إذ يتطلبان اتصالًا مستمرًا
- المؤشرات التي تستمر بعد انتهاء المعاملة
وضع الجلسة
استخدمه عندما يتسبب وضع المعاملة في تعطيل تطبيقك، لكنك ستحصل على عدد أقل من العملاء المتزامنين.
تحديد حجم مجمعات الاتصالات
قاعدة تقريبية: default_pool_size ≈ vCPU count × 2 + spindles. الحجم الأكبر من اللازم يؤدي إلى تبديل السياق ويقضي على معدل الإنتاجية، بينما يؤدي الحجم الأصغر من اللازم إلى الانتظار في مجمع الاتصالات.
PgBouncer أمام HAProxy
البنية المعتادة في بيئة الإنتاج:
App → HAProxy (read/write routing) → PgBouncer (pooling) → Postgres
العبارات المُعدّة في وضع المعاملة
تدعم إصدارات PgBouncer الحديثة (1.21+) العبارات المُعدّة على مستوى البروتوكول في وضع المعاملة. أما الإصدارات الأقدم، فاستخدم معها الاستعلامات البسيطة أو وضع الجلسة.
مراقبة PgBouncer
اتصل بقاعدة بيانات الإدارة، وهي قاعدة بيانات خاصة:
psql -p 6432 -U pgbouncer pgbouncer
-- Commands:
SHOW STATS;
SHOW POOLS;
SHOW CLIENTS;
SHOW SERVERS;البدائل
- pgpool-II — تجميع الاتصالات وموازنة التحميل وإعادة كتابة الاستعلامات
- Odyssey — أداة تجميع الاتصالات من Yandex، ومتعددة الخيوط
- مجمعات الاتصالات على مستوى برنامج التشغيل — تُستخدم عادةً مع PgBouncer لتجميع الاتصالات على مستوى المجموعة
مجمع اتصالات التطبيق وPgBouncer
تشغّل التطبيقات عادةً مجمع اتصالات خاصًا بها (HikariCP، pgxpool)، وتمر أيضًا عبر PgBouncer. هذا تجميع من طبقتين: يحتفظ مجمع التطبيق بالاتصالات مع الوسيط، بينما يوزّع الوسيط هذه الاتصالات على Postgres.
خلاصة
يُعد PgBouncer ضروريًا عند أي نطاق يتجاوز التطبيقات البسيطة.
- وضع المعاملة هو الوضع القياسي
- انتبه إلى العبارات المُعدّة وSET وLISTEN
- حجم مجمع الاتصالات يقارب vCPU × 2
- راقب باستخدام SHOW POOLS
اختبار سريع
أي وضع من أوضاع PgBouncer يوزّع أكبر عدد من العملاء على أقل عدد من اتصالات الخادم؟
الأسئلة الشائعة
هل درس «تجميع الاتصالات: PgBouncer» مجاني؟
نعم — نص درس «تجميع الاتصالات: PgBouncer» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Academy 4 دروس في المجموع.
ماذا ستتعلم في «تجميع الاتصالات: PgBouncer»؟
شغّل PgBouncer في وضع تجميع المعاملات، واضبط أحجام التجمعات بصورة صحيحة، وتجنب مشكلة العبارات المُعدّة تتمرن على SQL Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ SQL Academy؟
لا تُشترط خبرة سابقة. SQL Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «تجميع الاتصالات: PgBouncer»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس SQL Academy هذا؟
نعم. كل درس في SQL Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- pg_stat_statements: أهم الاستعلامات
- pgBadger لتحليل السجلات
- تجميع الاتصالات: PgBouncer
- تخطيط السعة وتدقيق التضخم