min_chunk_bytes_for_parallel_parsing
- النوع: عدد صحيح غير موقّع
- القيمة الافتراضية: 1 MiB
min_compress_block_size
min_compress_block_size. والقيمة الافتراضية هي 65,536.
أما الحجم الفعلي للكتلة، فإذا كانت البيانات غير المضغوطة أقل من max_compress_block_size، فلن يكون أقل من هذه القيمة ولا أقل من حجم البيانات الخاص بعلامة واحدة.
لننظر إلى مثال. افترض أن index_granularity ضُبطت على 8192 عند إنشاء الجدول.
لنفترض أننا نكتب عمودًا من النوع UInt32 (4 بايت لكل قيمة). عند كتابة 8192 صفًا، سيكون الإجمالي 32 كيلوبايت من البيانات. وبما أن min_compress_block_size = 65,536، فستُنشأ كتلة مضغوطة لكل علامتين.
ولنفترض أننا نكتب عمود URL من النوع String (بمتوسط حجم 60 بايت لكل قيمة). عند كتابة 8192 صفًا، سيكون المتوسط أقل قليلًا من 500 كيلوبايت من البيانات. وبما أن هذا أكبر من 65,536، فستُنشأ كتلة مضغوطة لكل علامة. وفي هذه الحالة، عند قراءة البيانات من القرص ضمن نطاق علامة واحدة، لن يجري فك ضغط بيانات إضافية.
هذا إعداد مخصص للخبراء، ويُفضَّل عدم تغييره إذا كنت لا تزال في بداية استخدام ClickHouse.
min_filtered_ratio_for_lazy_final
min_hit_rate_to_use_consecutive_keys_optimization
min_os_cpu_wait_time_ratio_to_throw
min_outstreams_per_resize_after_split
Resize أو StrictResize بعد تنفيذ عملية التقسيم أثناء إنشاء خط المعالجة. وإذا كان عدد التدفقات الناتج أقل من هذه القيمة، فلن تُجرى عملية التقسيم.
ما هي عقدة Resize
Resize معالجًا ضمن مسار تنفيذ الاستعلام يضبط عدد تدفقات البيانات المارة عبر خط المعالجة. ويمكنها زيادة عدد التدفقات أو تقليله لموازنة عبء العمل عبر عدة خيوط تنفيذ أو معالجات. على سبيل المثال، إذا كان الاستعلام يتطلب قدرًا أكبر من التوازي، يمكن لعقدة Resize تقسيم تدفق واحد إلى عدة تدفقات. وبالمقابل، يمكنها دمج عدة تدفقات في عدد أقل من التدفقات لتوحيد معالجة البيانات.
تضمن عقدة Resize توزيع البيانات بالتساوي عبر التدفقات مع الحفاظ على بنية كتل البيانات. ويساعد ذلك على تحسين استخدام الموارد ورفع أداء الاستعلام.
لماذا يلزم تقسيم عقدة Resize
Resize المركزية، لا سيّما في البيئات ذات العدد الكبير من الأنوية، ويؤدي هذا التنازع إلى:
- زيادة زمن الانتظار في ExecutingGraph::updateNode، مما يؤثر مباشرةً في أداء الاستعلام.
- هدر قدر كبير من دورات CPU في تنازع القفل الدوراني (native_queued_spin_lock_slowpath)، مما يضعف الكفاءة.
- انخفاض استخدام CPU، مما يحدّ من التوازي والإنتاجية.
كيفية تقسيم عقدة Resize
- يُتحقَّق من عدد تدفقات الإخراج للتأكد من إمكانية إجراء التقسيم: بحيث تفي تدفقات الإخراج لكل معالج ناتج عن التقسيم بعتبة
min_outstreams_per_resize_after_splitأو تتجاوزها. - تُقسَّم عقدة
Resizeإلى عقدResizeأصغر ذات عدد متساوٍ من المنافذ، بحيث تتولى كل منها مجموعة فرعية من تدفقات الإدخال والإخراج. - تُعالَج كل مجموعة بشكل مستقل، مما يقلل التنازع على القفل.
تقسيم عقدة Resize بمدخلات/مخرجات بعدد اعتباطي
Resize المُقسَّمة، تُوصَل بعض المدخلات بـ NullSources وتُوصَل بعض المخرجات بـ NullSinks. يتيح ذلك إجراء التقسيم من دون التأثير في تدفّق البيانات الإجمالي.
الغرض من الإعداد
min_outstreams_per_resize_after_split أن يكون تقسيم عُقد Resize ذا جدوى، ويمنع إنشاء عدد قليل جدًا من التدفقات، مما قد يؤدي إلى المعالجة المتوازية بصورة غير فعّالة. ومن خلال فرض حد أدنى لعدد تدفقات الإخراج، يساعد هذا الإعداد في الحفاظ على توازن بين التوازي والكلفة الإضافية، مما يُحسّن تنفيذ الاستعلام في السيناريوهات التي تتضمن تقسيم التدفقات ودمجها.
تعطيل الإعداد
Resize، اضبط هذا الإعداد على 0. سيؤدي ذلك إلى منع تقسيم عُقد Resize أثناء إنشاء خط المعالجة، مما يسمح لها بالاحتفاظ ببنيتها الأصلية من دون تجزئتها إلى عُقد أصغر.