max_insert_block_size
max_insert_block_size_rows
الحد الأقصى لحجم الكتل (من حيث عدد الصفوف) التي يجري تكوينها للإدراج في جدول.
يتحكم هذا الإعداد في تكوين الكتل في سياقين:
-
تحليل التنسيق: عندما يُحلِّل الخادم تنسيقات الإدخال المعتمدة على الصفوف (CSV وTSV وJSONEachRow وغيرها) من أي واجهة (HTTP، وclickhouse-client مع بيانات inline، وgRPC، وبروتوكول PostgreSQL wire)، تُخرَج الكتل عندما:
- يتم بلوغ كلٍّ من min_insert_block_size_rows وmin_insert_block_size_bytes، OR
- يتم بلوغ أحد max_insert_block_size_rows أو max_insert_block_size_bytes
-
عمليات INSERT: أثناء استعلامات INSERT وعندما تتدفق البيانات عبر materialized views، يعتمد سلوك هذا الإعداد على
use_strict_insert_block_limits:-
عند التمكين: تُخرَج الكتل عندما:
- الحدود الدنيا (AND): يتم بلوغ كلٍّ من min_insert_block_size_rows وmin_insert_block_size_bytes
- الحدود القصوى (OR): يتم بلوغ أحد max_insert_block_size_rows أو max_insert_block_size_bytes
- عند التعطيل: تُخرَج الكتل عند بلوغ min_insert_block_size_rows OR min_insert_block_size_bytes. ولا يتم فرض إعدادات max_insert_block_size.
-
عند التمكين: تُخرَج الكتل عندما:
- عدد صحيح موجب.
max_insert_block_size_bytes
- عدد صحيح موجب.
- 0 — لا يشارك الإعداد في تكوين الكتل.
max_insert_delayed_streams_for_parallel_write
50.
max_insert_threads
INSERT.
ينطبق ذلك على كل من INSERT SELECT وعمليات INSERT العادية التي تُرسل بياناتها من
clickhouse-client أو عبر واجهة HTTP. ويُنفَّذ جانب الكتابة في المسار
(دمج الكتل وكتابتها في الجدول الوجهة) بالتوازي
باستخدام ما يصل إلى هذا العدد من الخيوط.
القيم الممكنة:
- 0 — تلقائي. يستخدم عدد أنوية CPU المتاحة للخادم (وهي نفس القيمة التلقائية لـ
max_threads)، ويُخفَّض عند وجود ضغط على الذاكرة بواسطةmax_insert_threads_min_free_memory_per_thread. - 1 — يُنفَّذ
INSERTفي خيط واحد (من دون تنفيذ متوازٍ). استخدم هذا للحفاظ على ترتيب الإدراج فيINSERT ... SELECT. - عدد صحيح موجب أكبر من 1 — تنفيذ متوازٍ بعدد الخيوط المحدد.
1 (من دون تنفيذ متوازٍ). ومنذ الإصدار 26.8، تُحوَّل القيمة الافتراضية (0) إلى عدد أنوية CPU، لذا يُنفَّذ INSERT بالتوازي افتراضيًا. اضبط max_insert_threads على 1 (أو استخدم إعداد compatibility) لاستعادة السلوك السابق.
القيمة الافتراضية في Cloud:
1للعُقد ذات ذاكرة 8 GiB2للعُقد ذات ذاكرة 16 GiB4للعُقد الأكبر
INSERT SELECT إلا إذا كان جزء SELECT يُنفَّذ بالتوازي؛ راجع إعداد max_threads.
بالنسبة إلى INSERT العادي، تُقرأ بيانات الإدخال وتُحلَّل كتدفق واحد، ثم يُعاد تحجيم المسار إلى هذا العدد من التدفقات للكتابة.
لا ينطبق التوازي في جانب الكتابة إلا على عمليات INSERT العادية المتزامنة: إذ تُخزَّن عمليات الإدراج غير المتزامنة (async_insert = 1) في قائمة انتظار وتُفرَّغ في الخلفية، لذا لا تتأثر بهذا الإعداد وتظل دائمًا ذات تدفق واحد.
لا يُنفَّذ جانب الكتابة بالتوازي إلا عندما يكون ذلك آمنًا؛ وإلا فإنه يبقى ذا تدفق واحد ولا يكون لهذا الإعداد تأثير فيه. وبالأخص، تبقى الكتابة ذات تدفق واحد عند تمكين use_strict_insert_block_limits، أو عندما يلغي جدول الوجهة (أو جدول يعيد التوجيه إليه) تكرار الكتل المُدرجة ويكون إلغاء تكرار الإدراج مُمكّنًا للاستعلام (راجع deduplicate_insert)، أو عندما تكون للوجهة materialized views تابعة — بما في ذلك عروض جدول تعيد الوجهة التوجيه إليه، مثلًا خلف Alias — (ما لم يكن parallel_view_processing مُمكّنًا وكانت سلاسل العروض التابعة خالية من مخاطر إلغاء التكرار؛ أي إن إلغاء التكرار في العروض معطّل (deduplicate_blocks_in_dependent_materialized_views) أو لا يمكن لأي مسار من العروض التابعة إلغاء التكرار)، وكذلك دائمًا للوجهات Buffer وDistributed. يُفرِّغ Buffer بياناته في سياقه الخاص، بينما يعيد Distributed توجيه الكتابة إلى جزء بعيد (قد يخزّن البيانات مؤقتًا بنفسه)، لذا لا تتحكم إعدادات إلغاء التكرار الخاصة بهذا الاستعلام في الكتابة النهائية، وتبقى ذات تدفق واحد بغض النظر عنها. كما يبقى إدراج النصاب غير المتوازي (insert_quorum يساوي 2 أو أكبر، أو 'auto'، وinsert_quorum_parallel معطّل) ذا تدفق واحد، لأنه لا يسمح إلا بجزء نصاب واحد قيد التنفيذ لكل جدول.
تؤدي القيم الأعلى إلى زيادة استخدام الذاكرة.
max_insert_threads_min_free_memory_per_thread
max_threads_min_free_memory_per_thread، لكنه يُطبَّق على max_insert_threads بدلًا من max_threads. والقيمة الافتراضية هنا أعلى لأن مسارات الإدراج تحتفظ عادةً بمخازن مؤقتة أكبر لكل خيط (مثل أجزاء MergeTree وكتل الضغط) مقارنةً بمسارات القراءة.
إذا كان مقدار الذاكرة الحرة أقل من max_insert_threads مضروبًا في هذه القيمة، فسيُخفَّض max_insert_threads بما يتناسب مع ذلك، حتى حد أدنى يبلغ 1.
اضبطه على 0 لتعطيل هذا القيد.