Что означает это исключение
Too many parts, когда INSERT привел бы к превышению настроенного ограничения на количество активных частей данных в таблице MergeTree. Исключение часто содержит сообщение Merges are processing significantly slower than inserts.
Каждый синхронный INSERT создает как минимум одну часть данных. Если вставка содержит строки для нескольких значений партиций, ClickHouse может создать по одной части для каждой затронутой партиции. Фоновые слияния объединяют мелкие части в более крупные, но если новые части создаются быстрее, чем ClickHouse успевает их сливать, число активных частей продолжает расти.
Исключение может быть вызвано одной из следующих настроек:
parts_to_throw_insert, которая ограничивает количество активных частей в одной партиции.max_parts_in_total, которая ограничивает общее количество активных частей в таблице.
Определение причины
max_parts_in_total, подсчитайте все активные части в таблице:
- Частые небольшие синхронные вставки.
- Ключ партиционирования с большой мощностью.
- Вставки, содержащие строки для множества значений партиций.
- Фоновые слияния, которые не успевают выполняться из-за ограниченной пропускной способности хранилища, недостатка свободного места на диске или конкуренции за ресурсы.
system.merges и просмотреть записи серверного журнала, чтобы выявить ошибки слияния.
Устранение исключения
Батчи при синхронных вставках
INSERT в секунду. Меньшее число более крупных вставок создает меньше частей и уменьшает объем работы для фоновых слияний.
Используйте асинхронные вставки
wait_for_async_insert = 1, чтобы ClickHouse подтверждал вставку только после успешной записи данных.
Проверьте ключ партиционирования
Выявите узкие места при слиянии
Не используйте увеличение ограничений на части как основное решение
parts_to_throw_insert или max_parts_in_total не устраняет причину чрезмерного создания частей. Более высокие ограничения могут отсрочить исключение, но также увеличить нагрузку на файловую систему и метаданные и снизить производительность запросов. Изменяйте эти настройки только после того, как определите причину и убедитесь, что у системы достаточно ресурсов.
Проверьте восстановление
system.merges, пока отставание не будет устранено.