المقدمة
في هذا الدليل، سنناقش أولًا كيف يوزّع ClickHouse الاستعلام عبر عدة شظايا من خلال الجداول الموزعة، ثم كيف يمكن للاستعلام أن يستفيد من عدة نُسخ متماثلة أثناء تنفيذه.في بنية shared-nothing، تُقسَّم العناقيد عادةً إلى عدة شظايا، بحيث تحتوي كل شظية على مجموعة فرعية من إجمالي البيانات. ويعلو هذه الشظايا جدول موزّع، يوفّر عرضًا موحّدًا لكامل البيانات. يمكن إرسال عمليات القراءة إلى الجدول المحلي. وفي هذه الحالة، لن يُنفَّذ الاستعلام إلا على الشظية المحددة. أو يمكن إرساله إلى الجدول الموزّع، وعندها ستنفّذ كل شظية الاستعلامات المطلوبة. وسيقوم الخادم الذي تم الاستعلام من خلاله عن الجدول الموزّع بتجميع البيانات وإرجاع الرد إلى العميل: يوضح الشكل أعلاه ما يحدث عندما يرسل عميل استعلامًا إلى جدول موزّع:
- يُرسل استعلام SELECT إلى جدول موزّع على إحدى العقد بشكل عشوائي (باستخدام استراتيجية التناوب أو بعد توجيهه إلى خادم محدد بواسطة موازن تحميل). وستعمل هذه العقدة الآن كمنسّق.
- ستحدّد العقدة كل شظية تحتاج إلى تنفيذ الاستعلام استنادًا إلى المعلومات التي يحددها الجدول الموزّع، ثم يُرسل الاستعلام إلى كل شظية.
- تقرأ كل شظية البيانات وتُرشّحها وتُجمّعها محليًا، ثم ترسل حالة قابلة للدمج إلى المنسّق.
- تدمج العقدة المنسِّقة البيانات ثم ترسل الاستجابة إلى العميل.
بنية غير مُشظّاة
تقديم النسخ المتماثلة المتوازية
- يُرسَل الاستعلام من العميل إلى عقدة واحدة بعد مروره عبر موازن تحميل. وتصبح هذه العقدة المنسّق لهذا الاستعلام.
- تحلّل العقدة فهرس كل جزء، وتحدّد الأجزاء والحبيبات المناسبة للمعالجة.
- يقسّم المنسّق عبء العمل إلى مجموعة من الحبيبات التي يمكن إسنادها إلى نسخ متماثلة مختلفة.
- تُعالَج كل مجموعة من الحبيبات بواسطة النسخ المتماثلة المقابلة لها، وتُرسَل حالة قابلة للدمج إلى المنسّق عند الانتهاء.
- أخيرًا، يدمج المنسّق جميع نتائج النسخ المتماثلة ثم يعيد النتيجة إلى العميل.
- قد تكون بعض النسخ المتماثلة غير متاحة.
- تكون آلية النسخ المتماثل في ClickHouse غير متزامنة، وقد لا تحتوي بعض النسخ المتماثلة على الأجزاء نفسها في لحظة معينة.
- يجب التعامل مع كمون الذيل بين النسخ المتماثلة.
- تختلف ذاكرة التخزين المؤقت لنظام الملفات من نسخة متماثلة إلى أخرى بحسب النشاط على كل نسخة متماثلة، ما يعني أن إسناد المهام عشوائيًا قد يؤدي إلى أداء أقل كفاءة نظرًا إلى محلية ذاكرة التخزين المؤقت.
الإعلانات
- يُرسَل الاستعلام من العميل إلى إحدى العُقد بعد مروره عبر موازن التحميل. وتصبح هذه العقدة المنسّق لهذا الاستعلام.
- ترسل العقدة المنسِّقة طلبًا للحصول على إعلانات من جميع النسخ المتماثلة في العنقود. وقد تكون لدى النسخ المتماثلة تصوّرات مختلفة قليلًا عن المجموعة الحالية من الأجزاء في جدولٍ ما. لذلك نحتاج إلى جمع هذه المعلومات لتجنّب اتخاذ قرارات جدولة غير صحيحة.
- تستخدم العقدة المنسِّقة بعد ذلك الإعلانات لتحديد مجموعة من الحبيبات التي يمكن إسنادها إلى النسخ المتماثلة المختلفة. هنا، على سبيل المثال، نرى أنه لم تُسنَد أي حبيبات من الجزء 3 إلى النسخة المتماثلة 2 لأن هذه النسخة المتماثلة لم تُدرِج هذا الجزء في إعلانها. ولاحظ أيضًا أنه لم تُسنَد أي مهام إلى النسخة المتماثلة 3 لأن هذه النسخة لم تقدّم إعلانًا.
- بعد أن تعالج كل نسخة متماثلة الاستعلام على مجموعتها الفرعية من الحبيبات وتُرسَل الحالة القابلة للدمج مرة أخرى إلى المنسّق، يدمج المنسّق النتائج ثم يُرسَل الرد إلى العميل.
التنسيق الديناميكي
- تُبلغ النسخ المتماثلة عقدة المنسّق بأنها قادرة على معالجة المهام، ويمكنها أيضًا تحديد مقدار العمل الذي تستطيع معالجته.
- يوزّع المنسّق المهام على النسخ المتماثلة.
- تتمكن النسختان المتماثلتان 1 و2 من إنهاء مهمتهما بسرعة كبيرة، لذا تطلبان مهمة أخرى من عقدة المنسّق.
- يوزّع المنسّق مهامًا جديدة على النسختين المتماثلتين 1 و2.
- تكون جميع النسخ المتماثلة قد انتهت الآن من معالجة مهامها. وتطلب المزيد من المهام.
- يتحقق المنسّق، باستخدام الإعلانات، من المهام التي لا تزال بحاجة إلى معالجة، لكنه لا يجد أي مهام متبقية.
- يُبلغ المنسّق النسخ المتماثلة بأن كل شيء قد تمت معالجته. وسيقوم الآن بدمج جميع الحالات القابلة للدمج والرد على الاستعلام.
إدارة محلية ذاكرة التخزين المؤقت
| النسخة المتماثلة 1 | النسخة المتماثلة 2 | النسخة المتماثلة 3 | |
|---|---|---|---|
| الجزء 1 | g1, g6, g7 | g2, g4, g5 | g3 |
| الجزء 2 | g1 | g2, g4, g5 | g3 |
| الجزء 3 | g1, g6 | g2, g4, g5 | g3 |
max_parallel_replicas أقل
من عدد النسخ المتماثلة، فستُختار نسخ متماثلة عشوائية لتنفيذ الاستعلام.
استيلاء المهام
القيود
إذا صادفت مشكلة لا تندرج ضمن القيود المذكورة أدناه،
وتشتبه في أن النسخة المتماثلة المتوازية هي السبب، يُرجى فتح issue على GitHub باستخدام
الوسم
comp-parallel-replicas.| القيد | الوصف |
|---|---|
| الاستعلامات المعقدة | تعمل النسخ المتماثلة المتوازية حاليًا بشكل جيد إلى حدٍّ ما مع الاستعلامات البسيطة. ويمكن أن تؤثر عناصر التعقيد مثل CTEs وsubqueries وJOINs والاستعلامات غير المسطّحة وغيرها سلبًا في أداء الاستعلام. |
| الاستعلامات الصغيرة | إذا كنت تنفّذ استعلامًا لا يعالج عددًا كبيرًا من الصفوف، فقد لا يؤدي تشغيله على عدة نُسخ متماثلة إلى تحسين زمن التنفيذ، لأن زمن الشبكة اللازم للتنسيق بين النُسخ المتماثلة قد يضيف دورات إضافية إلى تنفيذ الاستعلام. يمكنك الحد من هذه المشكلات باستخدام الإعداد: parallel_replicas_min_number_of_rows_per_replica. |
| تُعطَّل النسخ المتماثلة المتوازية مع FINAL | |
| لا تُستخدم الإسقاطات مع النسخ المتماثلة المتوازية معًا | |
| البيانات عالية التفرّد والتجميع المعقّد | قد يؤدي التجميع عالي التفرّد الذي يتطلب إرسال كمية كبيرة من البيانات إلى إبطاء استعلاماتك بشكل ملحوظ. |
| التوافق مع المحلّل الجديد | قد يؤدي المحلّل الجديد إلى إبطاء تنفيذ الاستعلام أو تسريعه بشكل ملحوظ في سيناريوهات محددة. |
| Setting | Description |
|---|---|
enable_parallel_replicas | 0: معطّل1: مفعّل 2: فرض استخدام النسخة المتماثلة المتوازية، وسيُطلق استثناء إذا لم تُستخدم. |
cluster_for_parallel_replicas | اسم العنقود المُستخدَم للنسخ المتماثل المتوازي؛ وإذا كنت تستخدم ClickHouse Cloud، فاستخدم default. |
max_parallel_replicas | الحد الأقصى لعدد النسخ المتماثلة المستخدمة في تنفيذ الاستعلام عبر عدة نسخ متماثلة. وإذا تم تحديد عدد أقل من عدد النسخ المتماثلة في العنقود، فسيتم اختيار العُقد عشوائيًا. ويمكن أيضًا الإفراط في تخصيص هذه القيمة لمراعاة التوسّع الأفقي. |
parallel_replicas_min_number_of_rows_per_replica | يساعد في تقييد عدد النسخ المتماثلة المستخدمة بناءً على عدد الصفوف المطلوب معالجتها. ويُحدَّد عدد النسخ المتماثلة المستخدمة وفقًا لما يلي: estimated rows to read / min_number_of_rows_per_replica. |
enable_analyzer | لا يُدعَم تنفيذ الاستعلام باستخدام النسخ المتماثلة المتوازية إلا عند تفعيل المُحلِّل |
استقصاء المشكلات المتعلقة بالنسخ المتماثلة المتوازية
system.query_log. ويمكنك
أيضًا الاطلاع على جدول system.events
لرؤية جميع الأحداث التي حدثت على الخادم، كما يمكنك استخدام
table function clusterAllReplicas لرؤية الجداول على جميع النسخ المتماثلة
(إذا كنت من مستخدمي Cloud، فاستخدم default).
Query
الاستجابة
الاستجابة
Response
system.text_log أيضًا
معلومات عن تنفيذ الاستعلامات باستخدام النسخ المتماثلة المتوازية:
Query
الاستجابة
الاستجابة
Response
EXPLAIN PIPELINE. يوضّح هذا كيف سيُنفِّذ ClickHouse
الاستعلام والموارد التي سيستخدمها في
تنفيذه. لنأخذ الاستعلام التالي مثالًا:
EXPLAIN PIPELINE (without parallel replica)
EXPLAIN PIPELINE (with parallel replica)