خطوة بخطوة: كيف ينفّذ ClickHouse استعلامًا تجميعيًا بالتوازي
توزيع العمل عبر مسارات المعالجة
n من مسارات المعالجة المتوازية، حيث تُمرَّر البيانات وتُعالَج فيها كتلة بعد أخرى حتى الوصول إلى النتيجة النهائية:
يخضع عدد
n من مسارات المعالجة المتوازية لإعداد max_threads، والذي يساوي افتراضيًا عدد الأنوية (الخيوط) في CPU واحد المتاح لـ ClickHouse على الخادم. في المثال أعلاه، نفترض وجود 4 أنوية.
على جهاز يحتوي على 8 أنوية، ستتضاعف تقريبًا إنتاجية معالجة الاستعلام (لكن استخدام الذاكرة سيزداد أيضًا تبعًا لذلك)، لأن عددًا أكبر من المسارات سيعالج البيانات بالتوازي:
ويُعد التوزيع الفعّال للمسارات عاملًا أساسيًا لتحقيق أقصى استفادة من CPU وتقليل الزمن الإجمالي للاستعلام.
معالجة الاستعلامات على الجداول المُجزأة
يجمع الخادم الذي يستقبل الاستعلام أولًا جميع النتائج الفرعية من الـ shards ويَدمجها في النتيجة النهائية العامة. يتيح توزيع حمل الاستعلامات عبر الـ shards التوسع الأفقي في التوازي، وخاصة في البيئات ذات الإنتاجية العالية.
يستخدم ClickHouse Cloud النُسخ المتماثلة المتوازية بدلًا من الـ shardsفي ClickHouse Cloud، يتحقق هذا المستوى نفسه من التوازي من خلال parallel replicas، التي تعمل بصورة مشابهة للـ shards في العناقيد من نوع shared-nothing. وتعالج كل replica في ClickHouse Cloud — وهي عقدة compute عديمة الحالة — جزءًا من البيانات بالتوازي وتُسهم في النتيجة النهائية، تمامًا كما يفعل shard مستقل.
مراقبة توازي الاستعلامات
trace أثناء استعلام التجميع. في هذا العرض التوضيحي، أزلنا الشرط من الاستعلام — وإلا فلن تُعالَج سوى 3 حبيبات، وهو ما لا يوفر بيانات كافية ليستفيد ClickHouse من أكثر من عدد قليل من مسارات المعالجة المتوازية:
- ① يحتاج ClickHouse إلى قراءة 3,609 حبيبة (يُشار إليها على أنها علامات في سجلات التتبّع) عبر 3 نطاقات بيانات.
- ② مع 59 نواة CPU، يوزّع هذا العمل على 59 تدفق معالجة متوازيًا—واحد لكل مسار.
× 59 بالتوازي عبر مناطق بيانات غير متداخلة ضمن 59 مسار معالجة متوازيًا. يعكس ذلك قيمة max_threads ويوضح كيف تُنفَّذ كل مرحلة من مراحل الاستعلام بالتوازي عبر أنوية CPU.
يمكن لـ واجهة الويب المضمّنة في ClickHouse (المتاحة عند نقطة النهاية /play) عرض الخطة الفيزيائية أعلاه في شكل تصوّر بياني. في هذا المثال، نضبط max_threads على 4 للحفاظ على التصوّر مختصرًا، بحيث يعرض 4 مسارات معالجة متوازية فقط:
ملاحظة: اقرأ التصوّر من اليسار إلى اليمين. يمثّل كل صف مسار معالجة متوازيًا يمرّر كتل البيانات كتلةً تلو الأخرى، مع تطبيق تحويلات مثل التصفية والتجميع ومراحل المعالجة النهائية. في هذا المثال، يمكنك رؤية أربعة مسارات متوازية تقابل الإعداد max_threads = 4.
موازنة التحميل عبر مسارات المعالجة
Resize في الخطة الفيزيائية أعلاه تعيد التقسيم وإعادة التوزيع لتدفقات كتل البيانات عبر مسارات المعالجة، بما يضمن استخدامها بصورة متوازنة. وتكتسب إعادة الموازنة هذه أهمية خاصة عندما تختلف نطاقات البيانات في عدد الصفوف التي تطابق شروط الاستعلام، وإلا فقد تُرهَق بعض المسارات بينما تبقى أخرى خاملة. ومن خلال إعادة توزيع العمل، تساعد المسارات الأسرع نظيراتها الأبطأ فعليًا، مما يحسّن زمن تنفيذ الاستعلام إجمالًا.
لماذا لا يُلتزم دائمًا بـ max_threads
n بواسطة الإعداد max_threads، والذي يطابق افتراضيًا عدد أنوية CPU المتاحة لـ ClickHouse على الخادم:
max_threads اعتمادًا على كمية البيانات المختارة للمعالجة:
max_threads على 59، لا يستخدم ClickHouse سوى 30 تدفقًا متزامنًا لفحص البيانات.
والآن لنشغّل الاستعلام:
max_threads المُعدّة، لا يخصّص ClickHouse مسارات معالجة متوازية إضافية إلا عندما تكون هناك بيانات كافية تبرّر ذلك. وتشير كلمة “max” في max_threads إلى حدٍّ أقصى، لا إلى عددٍ مضمون من خيوط التنفيذ المستخدمة.
والمقصود بـ “البيانات الكافية” يتحدّد أساسًا من خلال إعدادين يحددان الحد الأدنى لعدد الصفوف (163,840 افتراضيًا) والحد الأدنى لعدد البايتات (2,097,152 افتراضيًا) التي ينبغي أن يعالجها كل مسار معالجة:
بالنسبة إلى عناقيد shared-nothing:
بالنسبة إلى العناقيد ذات التخزين المشترك (مثل ClickHouse Cloud):
- merge_tree_min_rows_for_concurrent_read_for_remote_filesystem
- merge_tree_min_bytes_for_concurrent_read_for_remote_filesystem
max_threads.
يوضح هذا أنه عند تنفيذ استعلامات على مجموعات بيانات صغيرة، يحد ClickHouse التوازي عمدًا. استخدم تجاوزات الإعدادات للاختبار فقط—not in production—إذ قد تؤدي إلى تنفيذ غير فعّال أو إلى تنازع على الموارد.
أهم النقاط
- يعالج ClickHouse الاستعلامات بالتوازي باستخدام مسارات معالجة مرتبطة بـ
max_threads. - يعتمد العدد الفعلي للمسارات على حجم البيانات المختارة للمعالجة.
- استخدم
EXPLAIN PIPELINEوسجلات التتبّع لتحليل استخدام المسارات.
أين يمكن العثور على مزيد من المعلومات
- طبقة معالجة الاستعلامات – ورقة VLDB 2024 (إصدار الويب) - شرح مفصل لنموذج التنفيذ الداخلي في ClickHouse، بما في ذلك الجدولة، والمعالجة عبر خطوط الأنابيب، وتصميم المعاملات.
- شرح حالات التجميع الجزئية - عرض تقني متعمق لكيفية إتاحة حالات التجميع الجزئية تنفيذًا متوازيًا عالي الكفاءة عبر مسارات المعالجة.
- فيديو تعليمي يشرح بالتفصيل جميع خطوات معالجة استعلامات ClickHouse: