يتيح الإعداد الجديد allow_asynchronous_read_from_io_pool_for_merge_tree أن يكون عدد خيوط القراءة (streams) أكبر من عدد الخيوط في بقية مسار تنفيذ الاستعلام.
عادةً ما يتحكم الإعداد max_threads في عدد خيوط القراءة المتوازية وخيوط معالجة الاستعلام المتوازية:
تُقرأ البيانات ‘بالترتيب’، عمودًا تلو الآخر، من القرص.
قراءة البيانات غير المتزامنة
يتيح الإعداد الجديد allow_asynchronous_read_from_io_pool_for_merge_tree أن يكون عدد خيوط القراءة (streams) أكبر من عدد الخيوط في بقية مسار تنفيذ الاستعلام، وذلك لتسريع الاستعلامات الباردة على خدمات ClickHouse Cloud ذات موارد CPU المحدودة، ولتحسين أداء الاستعلامات المقيّدة بعمليات الإدخال/الإخراج.
عند تفعيل هذا الإعداد، يتحكم الإعداد max_streams_for_merge_tree_reading في عدد خيوط القراءة:
تُقرأ البيانات بشكل غير متزامن وبالتوازي من أعمدة مختلفة.
لاحظ أنه يوجد أيضًا الإعداد max_streams_to_max_threads_ratio لتهيئة النسبة بين عدد خيوط القراءة (streams) وعدد الخيوط في بقية مسار تنفيذ الاستعلام. ومع ذلك، في اختبارات الأداء، لم يكن تأثيره كبيرًا بقدر الإعداد max_streams_for_merge_tree_reading
ماذا عن optimize_read_in_order؟
باستخدام تحسين optimize_read_in_order، يمكن لـ ClickHouse تجنّب إعادة فرز البيانات في الذاكرة إذا كان ترتيب الفرز في الاستعلامات يعكس الترتيب الفعلي للبيانات على القرص، لكن ذلك يتطلب قراءة البيانات بالترتيب (على عكس القراءة غير المتزامنة):
تتقدّم optimize_read_in_order على القراءة غير المتزامنة
عندما يكتشف ClickHouse أنه يمكن تطبيق تحسين optimize_read_in_order، يتم تجاهل / تعطيل الإعداد allow_asynchronous_read_from_io_pool_for_merge_tree.
- تحقّق من خط تنفيذ الاستعلام باستخدام العدد الافتراضي من خيوط التنفيذ لكلٍّ من قراءة البيانات ومعالجتها
- تحقّق من مسار الاستعلام باستخدام 60 خيط قراءة غير متزامن، وبالعدد الافتراضي من خيوط التنفيذ لبقية مسار تنفيذ الاستعلام
- تحقّق من مسار تنفيذ الاستعلام باستخدام 20 مؤشر ترابط لقراءة البيانات ومعالجتها
- تحقّق من مسار الاستعلام باستخدام 60 مؤشر ترابط للقراءة غير المتزامنة و20 مؤشر ترابط لباقي مسار تنفيذ الاستعلام
- تحقّق من مسار الاستعلام مع 60 خيط قراءة غير متزامن و20 خيطًا لبقية مسار تنفيذ الاستعلام
عندما يمكن تطبيق
تحسين optimize_read_in_order
آخر تعديل في ٢٥ يونيو ٢٠٢٦