Метод управления даннымиПартиционирование — это прежде всего метод управления данными, а не инструмент оптимизации запросов. Хотя в отдельных сценариях нагрузки оно может повышать производительность, его не стоит использовать как основной способ ускорения запросов; ключ партиционирования нужно выбирать очень тщательно, ясно понимая все последствия, и применять только тогда, когда это соответствует требованиям жизненного цикла данных или хорошо изученным сценариям доступа.
В ClickHouse партиционирование организует данные в логические сегменты на основе заданного ключа. Оно определяется с помощью секции PARTITION BY при создании таблицы и обычно используется для группировки строк по временным интервалам, категориям или другим значимым для бизнеса признакам. Каждое уникальное значение выражения партиционирования образует собственную физическую партицию на диске, а ClickHouse хранит данные в отдельных частях для каждого из этих значений. Партиционирование упрощает управление данными, облегчает применение политик хранения и может быть полезно для определённых шаблонов запросов.
Например, рассмотрим следующую таблицу набора данных UK price paid с ключом партиционирования toStartOfMonth(date).
Каждый раз, когда в таблицу вставляется набор строк, вместо создания (как минимум) одной части данных, содержащей все вставленные строки (как описано здесь), ClickHouse создает по одной новой части данных для каждого уникального значения ключа партиционирования среди вставленных строк:
Сервер ClickHouse сначала разбивает 4 строки из примера вставки, показанного на диаграмме выше, по значению их ключа партиционирования toStartOfMonth(date). Затем строки в каждой выявленной партиции обрабатываются обычно, проходя несколько последовательных шагов (① Сортировка, ② Разделение на столбцы, ③ Сжатие, ④ Запись на диск).
Более подробное объяснение партиционирования см. в этом руководстве.
При включенном партиционировании ClickHouse выполняет слияние частей данных только в пределах партиции, но не между партициями. Ниже это показано на примере таблицы выше:
Применение партиционирования
Партиционирование — мощный инструмент для управления большими наборами данных в ClickHouse, особенно в сценариях обсервабилити и аналитики. Оно позволяет эффективно выполнять операции по управлению жизненным циклом данных, поскольку целые партиции, часто привязанные ко времени или бизнес-логике, можно удалять, перемещать или архивировать одной операцией с метаданными. Это значительно быстрее и требует меньше ресурсов, чем удаление или копирование на уровне строк. Партиционирование также хорошо интегрируется с такими возможностями ClickHouse, как TTL и многоуровневое хранение, что позволяет реализовать политики хранения данных или стратегии горячего/холодного хранения без дополнительной оркестрации. Например, свежие данные можно хранить на быстром SSD-хранилище, а старые партиции автоматически перемещать в более дешевое объектное хранилище.
Хотя партиционирование может повысить производительность запросов для некоторых рабочих нагрузок, оно также может отрицательно повлиять на время ответа.
Если ключ партиционирования не входит в первичный ключ и вы фильтруете по нему, партиционирование может улучшить производительность запросов. Пример см. здесь.
И наоборот, если запросы обращаются к данным сразу в нескольких партициях, производительность может ухудшиться из-за увеличения общего числа частей. По этой причине пользователям следует понимать характер доступа к данным, прежде чем рассматривать партиционирование как метод оптимизации запросов.
Итог: партиционирование следует в первую очередь рассматривать как метод управления данными. Пример управления данными см. в “Managing Data” из руководства по сценариям использования обсервабилити и в “What are table partitions used for?” из Core Concepts - Table partitions.
Выберите ключ партиционирования с низкой мощностью
Важно понимать, что большое количество частей негативно влияет на производительность запросов. Поэтому ClickHouse будет отвечать на вставки ошибкой «too many parts», если число частей превысит заданные ограничения — либо общее, либо для одной партиции.
Крайне важно правильно выбрать мощность ключа партиционирования. Ключ партиционирования с высокой мощностью — когда число различных значений партиции велико — может привести к быстрому росту количества частей данных. Поскольку ClickHouse не выполняет слияние частей между партициями, слишком большое число партиций приведет к накоплению большого количества неслитых частей, что в итоге вызовет ошибку «Too many parts». Слияния крайне важны для уменьшения фрагментации хранилища и оптимизации скорости запросов, но при партициях с высокой мощностью эта возможность теряется.
Напротив, ключ партиционирования с низкой мощностью — с числом различных значений менее 100–1 000 — обычно является оптимальным. Он обеспечивает эффективное слияние частей, снижает накладные расходы на метаданные и предотвращает чрезмерное создание объектов в хранилище. Кроме того, ClickHouse автоматически создает индексы MinMax для столбцов партиции, что может значительно ускорить запросы с фильтрацией по этим столбцам. Например, фильтрация по месяцу, когда таблица партиционирована по toStartOfMonth(date), позволяет движку полностью пропускать нерелевантные партиции и их части.
Хотя партиционирование может повысить производительность в некоторых сценариях запросов, в первую очередь это средство управления данными. Во многих случаях запросы по всем партициям могут работать медленнее, чем в непартиционированной таблице, из-за большей фрагментации данных и необходимости сканировать больше частей. Используйте партиционирование осмотрительно и всегда следите за тем, чтобы выбранный ключ имел низкую мощность и соответствовал политикам жизненного цикла данных (например, срокам хранения через TTL). Если вы не уверены, нужно ли партиционирование, возможно, стоит начать без него и оптимизировать позже на основе наблюдаемого характера доступа.Последнее изменение 3 июля 2026 г.