فهم وتقليل تأخر التكرار في PostgreSQL

تحدث تأخر التكرار في برنامج PostgreSQL عندما يستغرق الوقت ليظهر التغييرات التي تم إجراؤها على الخادم الأساسي على الخادم المكرر. سواء كنت تستخدم التكرار التدفقي أو التكرار المنطقي، يمكن أن يؤثر التأخر على الأداء والاتساق وتوفر النظام. يغطي هذا المنشور أنواع التكرار، واختلافاتها، وأسباب التأخر، والصيغ الرياضية لتقدير التأخر، وتقنيات المراقبة، واستراتيجيات لتقليل تأخر التكرار.

أنواع التكرار في برنامج PostgreSQL

التكرار التدفقي

التكرار التدفقي يرسل تغييرات “سجل الكتابة المسبقة” (WAL) من الخادم الأساسي إلى خادم المكرر أو أكثر في الوقت الحقيقي تقريبًا. يطبق المكرر التغييرات بتسلسل حسب تلقيها. يقوم هذا الأسلوب بتكرار قاعدة البيانات بأكملها ويضمن تزامن المكررات.

المزايا

  • انخفاض التأخير مع تزامن تقريبي في الوقت الحقيقي.
  • كفاءة في تكرار قاعدة البيانات بالكامل.

العيوب

  • المكررات للقراءة فقط، لذا يجب توجيه جميع عمليات الكتابة إلى الخادم الأساسي.
  • إذا انقطع اتصال الشبكة، يمكن أن يزيد التأخر بشكل كبير.

التكرار المنطقي

التكرار المنطقي يقوم بنقل تغييرات مستوى البيانات بدلاً من البيانات المنخفضة المستوى في WAL. يمكنه تمكين التكرار الانتقائي، حيث يتم تكرار الجداول المحددة أو أجزاء من قاعدة بيانات معينة. يستخدم التكرار المنطقي عملية فك التشفير المنطقي لتحويل تغييرات WAL إلى تغييرات تشبه SQL.

المزايا

  • يسمح بالتكرار الانتقائي للجداول أو النطاقات الجزئية محددة.
  • يدعم النسخ القابلة للكتابة مع خيارات حل النزاعات.

العيوب

  • تأخير أعلى بسبب التشفير المنطقي.
  • أقل كفاءة من التكرار الجاري لمجموعات البيانات الكبيرة.

كيفية حدوث تأخير التكرار

يحدث تأخير التكرار عندما يتجاوز معدل توليد التغييرات على الخادم الأساسي معدل المعالجة والتطبيق على الخادم النسخة. يمكن أن يحدث هذا الاختلال بسبب عوامل أساسية مختلفة، كل منها يسهم في تأخيرات في تزامن البيانات. أسباب تأخير التكرار الأكثر شيوعًا هي:

تأخير الشبكة

يشير تأخير الشبكة إلى وقت سفر البيانات من الخادم الأساسي إلى الخادم النسخة. تتم نقل شرائح WAL (Write-Ahead Log) بشكل مستمر عبر الشبكة أثناء التكرار الجاري. حتى التأخيرات الطفيفة في نقل الشبكة يمكن أن تتراكم، مما يتسبب في تأخر النسخة.

الأسباب

  • أوقات انتقال عالية للشبكة (RTT).
  • مزيد من عرض النطاق لمعالجة حجم كبير من بيانات WAL.
  • ازدحام الشبكة أو فقدان الحزم.

إذا كان الخادم الأساسي يولد تغييرات كبيرة أثناء حركة المرور القصوى، فإن شبكة بطيئة أو محملة بشكل زائد يمكن أن تتسبب في تكدس، مما يمنع النسخة المكررة من استلام تغييرات WAL.

الحل

استخدام اتصالات شبكية منخفضة التأخير وعالية النطاق الترددي وتمكين ضغط WAL (wal_compression = on) لتقليل حجم البيانات أثناء النقل.

تكديس الإدخال/الإخراج

تحدث تكديسات الإدخال/الإخراج عندما يكون قرص خادم النسخة المكررة بطيئًا جدًا في كتابة تغييرات WAL الواردة. يعتمد التكرار التدفقي على كتابة التغييرات إلى القرص قبل تطبيقها، لذا قد تتسبب أي تأخيرات في نظام الإدخال/الإخراج في تراكم التأخر.

الأسباب

  • أقراص صلبة (HDDs) بطيئة أو محملة بشكل زائد.
  • نقص إنتاجية كتابة القرص.
  • تضارب القرص من عمليات أخرى.
  • إذا كان خادم النسخة المكررة يستخدم أقراصًا دوارة (HDD) بدلاً من أقراص ذات حالة صلبة (SSD)، فقد لا يتم كتابة تغييرات WAL بسرعة كافية لمواكبة تغييرات البيانات، مما يتسبب في تأخر النسخة المكررة مقارنة بالأساسية.

الحل

لتحسين إدخال/إخراج القرص الخاص بالنسخة المكررة، استخدام أقراص ذات حالة صلبة لزيادة سرعات الكتابة وعزل عمليات التكرار عن المهام الأخرى المكثفة للقرص.

قيود المعالج/الذاكرة

عمليات التكرار تتطلب وحدة المعالجة المركزية والذاكرة لفك التشفير، والكتابة، وتطبيق التغييرات. إذا كانت خادم النسخة الاحتياطية يفتقر إلى قوة معالجة كافية أو ذاكرة، فقد يصعب عليه مواكبة التعديلات الواردة، مما يؤدي إلى تأخر في التكرار.

الأسباب

  • نوى وحدات المعالجة المركزية المحدودة أو المعالجات البطيئة.
  • الذاكرة غير كافية لوحدات تخزين WAL.
  • عمليات أخرى تستهلك موارد وحدة المعالجة المركزية أو الذاكرة.
  • إذا كانت النسخة الاحتياطية تعالج معاملات كبيرة أو تقوم بتشغيل استعلامات جنبًا إلى جنب مع التكرار، فإن وحدة المعالجة المركزية قد تصبح مشبعة، مما يبطئ عملية التكرار.

الحل

تخصيص المزيد من وحدات المعالجة المركزية والذاكرة لخادم النسخة الاحتياطية. زيادة حجم wal_buffers لتحسين كفاءة معالجة WAL.

أعباء عمل ثقيلة على الخادم الأساسي

يمكن أيضًا حدوث تأخير في التكرار عندما ينشئ الخادم الأساسي الكثير من التغييرات بسرعة كبيرة جدًا بحيث لا يمكن للنسخة الاحتياطية مواجهتها. يمكن أن تغمر التعاملات الكبيرة، وإدراج الجمل الضخمة، أو التحديثات المتكررة عملية التكرار.

الأسباب

  • استيرادات البيانات الضخمة أو التعاملات الكبيرة.
  • تحديثات متكررة بتردد عالي على جداول كبيرة.
  • أعباء عمل متزامنة عالية على الخادم الأساسي.
  • قد تكون حمولة التعامل ثقيلة إذا كان الخادم الأساسي يعالج عدة تعاملات كبيرة بشكل متزامن، مثلما يحدث أثناء استيراد البيانات الضخمة. يمكن أن يتجاوز حجم بيانات WAL ما يمكن للنسخة الاحتياطية معالجته في الوقت الحقيقي، مما يزيد من التأخر.

الحل

قم بتحسين المعاملات عن طريق دمج تحديثات أصغر بشكل أكبر وتجنب تشغيل معاملات طويلة. إذا لم يكن التزام التزام التزام بالتزام التام ضروريًا، استخدم التكرار الغير متزامن لتقليل عبء التكرار.

تنافس الموارد

يحدث تنافس الموارد عندما تتنافس عدة عمليات على نفس الموارد، مثل وحدة المعالجة المركزية، الذاكرة، أو إدخال/إخراج القرص. يمكن أن يحدث هذا سواء على الخادم الأساسي أو النسخة الاحتياطية ويؤدي إلى تأخير في معالجة التكرار.

الأسباب

  • عمليات أخرى تستهلك إدخال/إخراج القرص، وحدة المعالجة المركزية، أو الذاكرة.
  • المهام الخلفية مثل النسخ الاحتياطي أو التحليلات تعمل بشكل متزامن.
  • تنافس الشبكة بين حركة التكرار ونقل البيانات الأخرى.
  • إذا كان الخادم النسخي يدير أيضًا عمليات نسخ احتياطية أو استعلامات تحليلية، فإن التنافس على وحدة المعالجة المركزية وموارد القرص قد يبطئ عملية التكرار.

الحل

عزل أعباء العمل للتكرار من عمليات استهلاك الموارد الأخرى. جدولة النسخ الاحتياطية والتحليلات خلال ساعات الذروة لتجنب التداخل مع عملية التكرار.

الصيغة الرياضية لتأخير التكرار

استخدم الصيغة التالية لحساب تأخير التكرار:

في التكرار المنطقي، يتم استهلاك الوقت الإضافي بواسطة الفك المنطقي:

مراقبة تأخير التكرار

مراقبة التكرار بالتدفق

يمكن استخدام عرض pg_stat_replication لمراقبة تأخر التكرار التدفقي. يوفر رؤى حول الحالة والتأخر بين الخوادم الأساسية والنسخة.

SQL

 

  • sent_lsn: آخر موقع WAL تم إرساله إلى النسخة.
  • write_lsn: آخر موقع WAL تم كتابته على النسخة.
  • lag_bytes: الفرق بين الاثنين يشير إلى التأخر.

مراقبة التكرار المنطقي

يمكن مراقبة تأخر التكرار المنطقي باستخدام عرض pg_stat_subscription.

SQL

 

مثال: تصور تأخر التكرار

يقوم كود Python التالي بتصوير تأخر التكرار التدفقي والمنطقي مع مرور الوقت.

Python

 

الرسم البياني الناتج يقارن أداء التكرار التدفقي والمنطقي. يميل التكرار المنطقي إلى أن يكون له تأخر متغير أكثر بسبب التكرير وتكاليف المعالجة.

كيفية تقليل تأخر التكرار

1. تحسين تكوين WAL

  • زيادة wal_buffers لاحتواء المزيد من بيانات WAL في الذاكرة.
  • قم بتعيين wal_writer_delay إلى قيمة أقل (مثل 10 مللي ثانية) لـ كتابة بيانات WAL بشكل أسرع.
Shell

 

2. تحسين أداء الشبكة

  • استخدم اتصالات شبكة ذات زمن استجابة منخفض وعرض نطاق عالي بين الخادم الرئيسي والنسخ المتماثلة.
  • قم بضغط بيانات WAL أثناء النقل لتقليل وقت النقل: wal_compression = on.

3. استخدم النسخ المتماثل غير المتزامن (عند الإمكان)

PLSQL

 

4. تفعيل التطبيق المتوازي في النسخ المتماثل المنطقي

PLSQL

 

5. تخصيص المزيد من الموارد للنسخ المتماثلة

  • تأكد من أن النسخة الاحتياطية لديها ما يكفي من وحدة المعالجة المركزية والذاكرة لمعالجة تغييرات WAL بسرعة.
  • استخدم أقراص SSD لسرعة إدخال/إخراج القرص على النسخة الاحتياطية.

6. دفع المعاملات

  • قم بتجميع التحديثات الطفيفة المتعددة في معاملات أقل لتقليل العبء.

أمثلة من العالم الواقعي

تقليل تأخر التكرار التدفقي

شركة تدير مجموعة بيانات PostgreSQL عالية المرور وواجهت تأخرًا في التكرار خلال ساعات الذروة. نجحوا في تقليل التأخر في التكرار إلى النصف من خلال زيادة wal_buffers إلى 64 ميغابايت وتقليل wal_writer_delay إلى 10 مللي ثانية. تحولوا إلى اتصال شبكة عالي السرعة وحققوا تقليل التأخر إلى أقل من ثانية واحدة.

تقليل تأخر التكرار المنطقي

نظام مع عدة اشتراكات منطقية واجه تأخرًا أثناء أعباء كتابة عالية. بتمكين التطبيق المتوازي في PostgreSQL 14 تم توزيع العبء على عدة عمال، مما أدى إلى تقليل تأخر التكرار من 4 ثوانٍ إلى أقل من ثانية واحدة.

الاستنتاج

تأخر التكرار هو قضية حرجة تؤثر على أداء واتساق أنظمة PostgreSQL. يقدم التكرار التدفقي انخفاضًا في التأخير ولكن يتطلب تكرار قاعدة البيانات بأكملها، بينما يوفر التكرار المنطقي مرونة ولكن بعبء أعلى. يتيح التحقق الدوري باستخدام pg_stat_replication و pg_stat_subscription للمسؤولين اكتشاف التأخر والتخفيف منه.

يمكن أن يؤدي تحسين تكوينات WAL، وتحسين أداء الشبكة، واستخدام التطبيقات الموازية، وتخصيص موارد كافية إلى تقليل التأخير بشكل كبير. يضمن الضبط الصحيح بقاء النسخ متزامنة ويضمن أن النظام يحتفظ بتوافر عالي وأداء جيد.

Source:
https://dzone.com/articles/understanding-and-reducing-postgresql-replication-lag