Skip to main content

DB::Исключение: Too many parts (Ошибка: 252). Слияния выполняются значительно медленнее, чем вставки

Вы достигли значения настройки parts_to_throw_insert для таблицы MergeTree. Вы можете отслеживать количество активных частей для конкретной таблицы с помощью:
Основное требование при вставке данных в ClickHouse: никогда не отправляйте слишком много операторов INSERT в секунду. В идеале — одна вставка в секунду или раз в несколько секунд. То есть вы можете вставлять 100K строк в секунду, но только одним большим bulk-оператором INSERT. Если вы отправляете сотни / тысячи операторов вставки в секунду в таблицу семейства *MergeTree, вы неизбежно будете получать ошибки, и это нельзя исправить простой настройкой каких-либо параметров. Если вы не можете объединить множество вставок в один большой bulk-оператор вставки на стороне клиента, то перед таблицей семейства *MergeTree следует создать Buffer table.
  1. Каждая вставка создаёт папку в /var/lib/clickhouse/.../table_name/. Внутри этой папки находятся 2 файла на каждый столбец: один с данными (сжатыми), второй — с индексом. Данные внутри этих файлов физически отсортированы по первичному ключу. Эти папки называются ‘части’.
  2. ClickHouse в фоновом режиме выполняет слияние этих небольших частей в более крупные. Части для слияния выбираются по определённым правилам. После слияния двух (или более) частей создаётся одна более крупная часть, а старые части ставятся в очередь на удаление. Перечисленные вами настройки позволяют тонко настраивать правила слияния частей. Цель процесса слияния — оставить одну большую часть для каждой партиции (или несколько больших частей на партицию, которые уже нецелесообразно сливать, потому что они слишком велики). Также посмотрите этот comment.
  3. Если вы создаёте новые части слишком быстро (например, выполняя много мелких вставок), а ClickHouse не успевает сливать их с нужной скоростью (то есть новые части появляются быстрее, чем ClickHouse успевает выполнять слияние), — вы получаете исключение ‘Merges are processing significantly slower than inserts’. Можно попробовать увеличить лимит, но тогда можно столкнуться с проблемами файловой системы из-за слишком большого числа файлов / каталогов (например, с ограничением на количество инод).
  4. Если вы вставляете данные сразу во множество партиций, проблема умножается на количество партиций, затронутых вставкой.
  5. Вы можете попробовать скорректировать поведение ClickHouse с помощью одной из перечисленных настроек либо max_insert_block_size / max_block_size / insert_format_max_block_size / max_client_network_bandwidth. Но лучшее решение — просто вставлять данные в ожидаемом темпе. Ожидаемый темп такой: одна вставка раз в 1-2 сек, каждая вставка содержит 10K-500K строк данных.
  6. Итак, правильное решение проблемы “Merges are processing significantly slower than inserts” — скорректировать количество вставок в секунду и число строк в каждой вставке. Используйте батч-вставку, чтобы объединять мелкие вставки в более крупные, если данные поступают построчно. Ограничивайте скорость очень больших вставок, если вам нужно вставить слишком много данных сразу. Не меняйте внутренние компоненты ClickHouse, если только вы действительно хорошо не понимаете, что это значит.
  7. Если ваши данные поступают быстрее, чем 500K строк в секунду, то, скорее всего, вам нужно больше серверов в кластере для обслуживания этого трафика, а не настройка параметров.
  8. Скорость фоновых слияний обычно зависит от скорости хранилища, используемых настроек сжатия, варианта MergeTree (алгоритма слияния — обычное слияние/aggregating/summing/collapsing и т. д.) и используемого ключа сортировки.
Последнее изменение 3 июля 2026 г.