max_insert_block_size
max_insert_block_size_rows
Максимальный размер блоков (по числу строк), формируемых для вставки в таблицу.
Этот параметр управляет формированием блоков в двух контекстах:
-
Разбор форматов: когда сервер разбирает входные построчные форматы (CSV, TSV, JSONEachRow и т. д.) через любой интерфейс (HTTP, clickhouse-client со встроенными данными, gRPC, PostgreSQL wire protocol), блоки формируются, когда:
- Достигнуты оба порога: min_insert_block_size_rows И min_insert_block_size_bytes, ИЛИ
- Достигнут любой из порогов: max_insert_block_size_rows ИЛИ max_insert_block_size_bytes
-
Операции INSERT: во время запросов INSERT и при прохождении данных через materialized views поведение этого параметра зависит от
use_strict_insert_block_limits:-
Когда включено: блоки формируются, когда:
- Минимальные пороги (И): достигнуты оба значения min_insert_block_size_rows И min_insert_block_size_bytes
- Максимальные пороги (ИЛИ): достигнуто либо значение max_insert_block_size_rows, либо max_insert_block_size_bytes
- Когда отключено: блоки формируются, когда достигнуто значение min_insert_block_size_rows ИЛИ 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 GiB памяти2для узлов с 16 GiB памяти4для более крупных узлов
INSERT SELECT работает, только если часть SELECT выполняется параллельно; см. настройку max_threads.
Для обычного INSERT входные данные считываются и разбираются в одном потоке, после чего конвейер для записи масштабируется до указанного количества потоков.
Параллелизация на стороне записи применяется только к синхронным обычным INSERT: асинхронные вставки (async_insert = 1) помещаются в очередь и сбрасываются на диск в фоновом режиме, поэтому эта настройка на них не влияет и они всегда обрабатываются в одном потоке.
Сторона записи распараллеливается, только когда это безопасно; в противном случае она остаётся однопоточной, и эта настройка на неё не влияет. В частности, запись остаётся однопоточной, если включён use_strict_insert_block_limits, целевая таблица (или таблица, в которую она перенаправляет данные) выполняет дедупликацию вставляемых блоков и для запроса включена дедупликация вставок (см. deduplicate_insert), если у пункта назначения есть зависимые materialized view — включая представления таблицы, в которую пункт назначения перенаправляет данные, например за 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, чтобы отключить это ограничение.