Перейти к основному содержанию
В ClickHouse мутации — это операции, которые изменяют или удаляют существующие данные в таблице, обычно с помощью ALTER TABLE ... DELETE или ALTER TABLE ... UPDATE. Хотя эти операторы могут казаться похожими на стандартные SQL-операции, по своей сути они устроены иначе. Вместо изменения строк на месте мутации в ClickHouse представляют собой асинхронные фоновые процессы, которые переписывают целые части данных, затронутые изменением. Такой подход необходим из-за колоночной неизменяемой модели хранения ClickHouse и может приводить к значительной нагрузке на I/O и другие ресурсы. Когда запускается мутация, ClickHouse планирует создание новых мутированных частей, оставляя исходные части нетронутыми, пока новые не будут готовы. После этого мутированные части атомарно заменяют исходные. Однако, поскольку операция переписывает части целиком, даже незначительное изменение (например, обновление одной строки) может привести к масштабному переписыванию и чрезмерному усилению записи. Для больших наборов данных это может вызвать существенный всплеск дискового I/O и ухудшить общую производительность кластера. В отличие от слияний, мутации нельзя откатить после запуска, и они будут продолжать выполняться даже после перезапуска сервера, если их явно не отменить — см. KILL MUTATION.
Мониторинг числа активных мутаций и мутаций в очереди в ClickHouseО том, как отслеживать число активных мутаций и мутаций в очереди, см. в следующей статье базы знаний.
Мутации полностью упорядочены: они применяются к данным, вставленным до запуска мутации, тогда как более новые данные остаются незатронутыми. Они не блокируют вставки, но могут пересекаться с другими выполняющимися запросами. SELECT, выполняющийся во время мутации, может читать смесь мутированных и немутированных частей, из-за чего во время выполнения возможно несогласованное представление данных. ClickHouse выполняет мутации параллельно для каждой части, что может еще сильнее увеличивать потребление памяти и CPU, особенно если задействованы сложные подзапросы (например, x IN (SELECT …)). Как правило, избегайте частых или масштабных мутаций, особенно в таблицах с большим объемом данных. Вместо этого используйте альтернативные движки таблиц, такие как ReplacingMergeTree или CollapsingMergeTree, которые предназначены для более эффективной обработки исправлений данных во время выполнения запроса или при слияниях. Если мутации абсолютно необходимы, внимательно отслеживайте их с помощью таблицы system.mutations и используйте KILL MUTATION, если процесс завис или работает некорректно. Неправильное использование мутаций может привести к ухудшению производительности, чрезмерной нагрузке на хранилище и потенциальной нестабильности сервиса, поэтому применяйте их осторожно и только при необходимости. Для удаления данных вы также можете рассмотреть легковесное удаление или управление данными через партиции, которые позволяют эффективно удалять части целиком.
Последнее изменение 10 июня 2026 г.