Настройки таблиц MergeTree
Системная таблица system.merge_tree_settings
показывает глобально установленные настройки MergeTree.
Настройки MergeTree могут быть установлены в разделе merge_tree
файла конфигурации сервера или указаны для каждой таблицы MergeTree
отдельно в
классе SETTINGS
оператора CREATE TABLE
.
Пример настройки параметра max_suspicious_broken_parts
:
Настройка по умолчанию для всех таблиц MergeTree
в файле конфигурации сервера:
Установка для конкретной таблицы:
Изменить настройки для конкретной таблицы с использованием ALTER TABLE ... MODIFY SETTING
:
allow_nullable_key
Разрешить Nullable типы в качестве первичных ключей.
Значение по умолчанию: 0.
index_granularity
Максимальное количество строк данных между метками индекса.
Значение по умолчанию: 8192.
index_granularity_bytes
Максимальный размер гранул данных в байтах.
Значение по умолчанию: 10485760 (примерно 10 Миб).
Чтобы ограничить размер гранулы только количеством строк, установите в 0 (не рекомендуется).
min_index_granularity_bytes
Минимально допустимый размер гранул данных в байтах.
Значение по умолчанию: 1024b.
Для обеспечения защиты от случайного создания таблиц с очень низким index_granularity_bytes.
enable_mixed_granularity_parts
Включает или отключает переход к управлению размером гранулы с помощью настройки index_granularity_bytes
. До версии 19.11 существовала только настройка index_granularity
для ограничения размера гранул. Настройка index_granularity_bytes
улучшает производительность ClickHouse при выборе данных из таблиц с большими строками (десятки и сотни мегабайт). Если у вас есть таблицы с большими строками, вы можете включить эту настройку для таблиц, чтобы повысить эффективность запросов SELECT
.
use_minimalistic_part_header_in_zookeeper
Метод хранения заголовков частей данных в ZooKeeper. Если включен, ZooKeeper хранит меньше данных. Подробности см. здесь.
min_merge_bytes_to_use_direct_io
Минимальный объем данных для операции объединения, необходимый для использования прямого доступа к диску хранилища.
При слиянии частей данных ClickHouse вычисляет общий объем хранимых данных для слияния.
Если объем превышает min_merge_bytes_to_use_direct_io
байт, ClickHouse читает и записывает данные на диск хранилища с использованием интерфейса прямого доступа (O_DIRECT
опция).
Если min_merge_bytes_to_use_direct_io = 0
, то прямой доступ отключен.
Значение по умолчанию: 10 * 1024 * 1024 * 1024
байт.
ttl_only_drop_parts
Регулирует, должны ли части данных полностью удаляться в таблицах MergeTree, когда все строки в этой части истекли в соответствии с их настройками TTL
.
Когда ttl_only_drop_parts
отключен (по умолчанию), удаляются только строки, срок действия которых истек на основе их настроек TTL.
Когда ttl_only_drop_parts
включен, вся часть удаляется, если все строки в этой части истекли в соответствии с их настройками TTL
.
Значение по умолчанию: 0.
merge_with_ttl_timeout
Минимальная задержка в секундах перед повторным слиянием с удалением по TTL.
Значение по умолчанию: 14400
секунд (4 часа).
merge_with_recompression_ttl_timeout
Минимальная задержка в секундах перед повторным слиянием с повторной компрессией по TTL.
Значение по умолчанию: 14400
секунд (4 часа).
write_final_mark
Включает или отключает запись окончательной метки индекса в конце части данных (после последнего байта).
Значение по умолчанию: 1.
Не изменяйте, иначе произойдут плохие вещи.
storage_policy
Политика хранения.
min_bytes_for_wide_part
Минимальное количество байт/строк в части данных, которые могут храниться в формате Wide
.
Вы можете установить одну, обе или ни одну из этих настроек.
max_compress_block_size
Максимальный размер блоков несжатых данных перед компрессией для записи в таблицу. Вы также можете указать эту настройку в глобальных настройках (см. настройку max_compress_block_size). Значение, указанное при создании таблицы, переопределяет глобальное значение для этой настройки.
min_compress_block_size
Минимальный размер блоков несжатых данных, необходимый для компрессии при записи следующей метки. Вы также можете указать эту настройку в глобальных настройках (см. настройку min_compress_block_size). Значение, указанное при создании таблицы, переопределяет глобальное значение для этой настройки.
max_merge_selecting_sleep_ms
Максимальное время ожидания перед повторной попыткой выбрать части для слияния после того, как ни одна часть не была выбрана. Настройка на низком уровне вызовет частые задачи выбора в background_schedule_pool
, что приведет к большому количеству запросов к ZooKeeper в крупных кластерах.
Значение по умолчанию: 60000
max_suspicious_broken_parts
Если количество поврежденных частей в одной партиции превышает значение max_suspicious_broken_parts
, автоматическое удаление запрещается.
Возможные значения:
- Любое положительное целое число.
Значение по умолчанию: 100.
parts_to_throw_insert
Если количество активных частей в одной партиции превышает значение parts_to_throw_insert
, INSERT
прерывается с исключением Слишком много частей (N). Слияния обрабатываются значительно медленнее, чем вставки
.
Возможные значения:
- Любое положительное целое число.
Значение по умолчанию: 3000.
Для достижения максимальной производительности запросов SELECT
необходимо минимизировать количество обрабатываемых частей, см. Merge Tree.
До версии 23.6 эта настройка была равна 300. Вы можете установить более высокое значение, что снизит вероятность ошибки Слишком много частей
, но, в то же время, производительность SELECT
может ухудшиться. Также в случае проблемы с слиянием (например, из-за недостатка дискового пространства) вы это заметите позже, чем это могло бы быть с оригинальными 300.
parts_to_delay_insert
Если количество активных частей в одной партиции превышает значение parts_to_delay_insert
, INSERT
искусственно замедляется.
Возможные значения:
- Любое положительное целое число.
Значение по умолчанию: 1000.
ClickHouse искусственно выполняет INSERT
дольше (добавляет 'sleep'), чтобы процесс фона мог сливать части быстрее, чем они добавляются.
inactive_parts_to_throw_insert
Если количество неактивных частей в одной партиции превышает значение inactive_parts_to_throw_insert
, INSERT
прерывается с исключением "Слишком много неактивных частей (N). Очистка частей обрабатывается значительно медленнее, чем вставки".
Возможные значения:
- Любое положительное целое число.
Значение по умолчанию: 0 (без ограничения).
inactive_parts_to_delay_insert
Если количество неактивных частей в одной партиции в таблице по крайней мере равно значению inactive_parts_to_delay_insert
, INSERT
искусственно замедляется. Полезно, когда сервер не успевает очистить части достаточно быстро.
Возможные значения:
- Любое положительное целое число.
Значение по умолчанию: 0 (без ограничения).
max_delay_to_insert
Значение в секундах, которое используется для расчета задержки INSERT
, если количество активных частей в одной партиции превышает значение parts_to_delay_insert.
Возможные значения:
- Любое положительное целое число.
Значение по умолчанию: 1.
Задержка (в миллисекундах) для INSERT
рассчитывается по формуле:
Например, если в партиции 299 активных частей и parts_to_throw_insert = 300, parts_to_delay_insert = 150, max_delay_to_insert = 1, INSERT
задерживается на pow( 1 * 1000, (1 + 299 - 150) / (300 - 150) ) = 1000
миллисекунд.
Начиная с версии 23.1 формула была изменена на:
Например, если в партиции 224 активных частей и parts_to_throw_insert = 300, parts_to_delay_insert = 150, max_delay_to_insert = 1, min_delay_to_insert_ms = 10, INSERT
задерживается на max( 10, 1 * 1000 * (224 - 150 + 1) / (300 - 150) ) = 500
миллисекунд.
max_parts_in_total
Если общее количество активных частей во всех партициях таблицы превышает значение max_parts_in_total
, INSERT
прерывается с исключением Слишком много частей (N)
.
Возможные значения:
- Любое положительное целое число.
Значение по умолчанию: 100000.
Большое количество частей в таблице снижает производительность запросов ClickHouse и увеличивает время загрузки ClickHouse. Чаще всего это следствие неправильного проектирования (ошибки при выборе стратегии партиционирования - слишком маленькие партиции).
simultaneous_parts_removal_limit
Если существует много устаревших частей, поток очистки попытается удалить до simultaneous_parts_removal_limit
частей за одну итерацию.
simultaneous_parts_removal_limit
, установленный в 0
, означает неограниченное количество.
Значение по умолчанию: 0.
replicated_deduplication_window
Количество недавно вставленных блоков, для которых ClickHouse Keeper хранит хеш-суммы для проверки на дубликаты.
Возможные значения:
- Любое положительное целое число.
- 0 (отключить дедупликацию).
Значение по умолчанию: 1000.
Команда Insert
создает один или несколько блоков (частей). Для дедупликации вставок, при записи в реплицированные таблицы ClickHouse записывает хеш-суммы созданных частей в ClickHouse Keeper. Хеш-суммы хранятся только для самых последних replicated_deduplication_window
блоков. Самые старые хеш-суммы удаляются из ClickHouse Keeper.
Большое количество replicated_deduplication_window
замедляет Insert
, поскольку требуется сравнивать больше записей.
Хеш-сумма вычисляется по составу имен полей, их типам и данным вставленной части (поток байтов).
non_replicated_deduplication_window
Количество недавно вставленных блоков в не реплицированной MergeTree таблице, для которых хеш-суммы хранятся для проверки на дубликаты.
Возможные значения:
- Любое положительное целое число.
- 0 (отключить дедупликацию).
Значение по умолчанию: 0.
Используется механизм дедупликации, аналогичный реплицированным таблицам (см. настройку replicated_deduplication_window). Хеш-суммы созданных частей записываются в локальный файл на диске.
replicated_deduplication_window_seconds
Количество секунд, после которых хеш-суммы вставленных блоков удаляются из ClickHouse Keeper.
Возможные значения:
- Любое положительное целое число.
Значение по умолчанию: 604800 (1 неделя).
Аналогично replicated_deduplication_window, replicated_deduplication_window_seconds
указывает, как долго хранить хеш-суммы блоков для дедупликации вставок. Хеш-суммы, старшие replicated_deduplication_window_seconds
, удаляются из ClickHouse Keeper, даже если они меньше replicated_deduplication_window
.
Время относительно времени самой последней записи, а не по реальному времени. Если это единственная запись, она будет храниться вечно.
replicated_deduplication_window_for_async_inserts
Количество недавно вставленных асинхронных блоков, для которых ClickHouse Keeper хранит хеш-суммы для проверки на дубликаты.
Возможные значения:
- Любое положительное целое число.
- 0 (отключить дедупликацию для async_inserts).
Значение по умолчанию: 10000.
Команда Async Insert будет кэширована в одном или нескольких блоках (частях). Для дедупликации вставок при записи в реплицированные таблицы ClickHouse записывает хеш-суммы каждой вставки в ClickHouse Keeper. Хеш-суммы хранятся только для самых последних replicated_deduplication_window_for_async_inserts
блоков. Самые старые хеш-суммы удаляются из ClickHouse Keeper.
Большое количество replicated_deduplication_window_for_async_inserts
замедляет Async Inserts
, так как требуется сравнивать больше записей.
Хеш-сумма вычисляется из составов имен полей и типов и данных вставки (поток байтов).
replicated_deduplication_window_seconds_for_async_inserts
Количество секунд, после которых хеш-суммы асинхронных вставок удаляются из ClickHouse Keeper.
Возможные значения:
- Любое положительное целое число.
Значение по умолчанию: 604800 (1 неделя).
Аналогично replicated_deduplication_window_for_async_inserts, replicated_deduplication_window_seconds_for_async_inserts
указывает, как долго хранить хеш-суммы блоков для дедупликации асинхронных вставок. Хеш-суммы, старшие replicated_deduplication_window_seconds_for_async_inserts
, удаляются из ClickHouse Keeper, даже если они меньше replicated_deduplication_window_for_async_inserts
.
Время относительно времени самой последней записи, а не по реальному времени. Если это единственная запись, она будет храниться вечно.
use_async_block_ids_cache
Если true, мы кэшируем хеш-суммы асинхронных вставок.
Возможные значения:
- true, false
Значение по умолчанию: false.
Блок, содержащий несколько асинхронных вставок, будет генерировать несколько хеш-сумм. Когда некоторые из вставок дублируются, Keeper вернет только одну дублированную хеш-сумму в одном RPC, что приведет к ненужным повторным попыткам RPC. Этот кэш будет отслеживать путь хеш-сумм в Keeper. Если обновления отслеживаются в Keeper, кэш будет обновлен как можно скорее, чтобы мы могли отфильтровывать дублированные вставки в памяти.
async_block_ids_cache_min_update_interval_ms
Минимальный интервал (в миллисекундах) для обновления use_async_block_ids_cache
.
Возможные значения:
- Любое положительное целое число.
Значение по умолчанию: 100.
Обычно use_async_block_ids_cache
обновляется, как только происходят обновления в отслеживаемом пути Keeper. Однако обновления кэша могут происходить слишком часто и стать тяжелым бременем. Этот минимальный интервал предотвращает слишком быстрое обновление кэша. Имейте в виду, что если мы установим это значение слишком большим, блок с дублированными вставками будет иметь большее время повторной попытки.
max_replicated_logs_to_keep
Сколько записей может находиться в журнале ClickHouse Keeper, если есть неактивная реплика. Неактивная реплика считается потерянной, когда это число превышается.
Возможные значения:
- Любое положительное целое число.
Значение по умолчанию: 1000
min_replicated_logs_to_keep
Сохраните примерно это количество последних записей в журнале ZooKeeper, даже если они устарели. Это не влияет на работу таблиц: используется только для диагностики журнала ZooKeeper перед очисткой.
Возможные значения:
- Любое положительное целое число.
Значение по умолчанию: 10
prefer_fetch_merged_part_time_threshold
Если время, прошедшее с момента создания записи в журнале репликации (ClickHouse Keeper или ZooKeeper), превышает этот порог, и сумма размера частей больше, чем prefer_fetch_merged_part_size_threshold
, то предпочтительнее извлечение объединенной части с реплики, чем выполнение слияния локально. Это сделано для ускорения очень долгих слияний.
Возможные значения:
- Любое положительное целое число.
Значение по умолчанию: 3600
prefer_fetch_merged_part_size_threshold
Если сумма размера частей превышает этот порог, и время с момента создания записи в журнале репликации превышает prefer_fetch_merged_part_time_threshold
, то предпочтительнее извлечение объединенной части с реплики, чем выполнение слияния локально. Это сделано для ускорения очень долгих слияний.
Возможные значения:
- Любое положительное целое число.
Значение по умолчанию: 10,737,418,240
execute_merges_on_single_replica_time_threshold
Когда эта настройка имеет значение больше нуля, только одна реплика начинает слияние немедленно, а другие реплики ждут до этого времени, чтобы загрузить результат, а не выполнять слияния локально. Если выбранная реплика не завершает слияние в течение этого времени, выполняется стандартное поведение.
Возможные значения:
- Любое положительное целое число.
Значение по умолчанию: 0 (секунды)
remote_fs_execute_merges_on_single_replica_time_threshold
Когда эта настройка имеет значение больше нуля, только одна реплика начинает слияние немедленно, если объединенная часть на общем хранилище и allow_remote_fs_zero_copy_replication
включен.
Репликация без копий по умолчанию отключена в ClickHouse версии 22.8 и выше. Эта функция не рекомендуется для использования в производстве.
Возможные значения:
- Любое положительное целое число.
Значение по умолчанию: 10800
try_fetch_recompressed_part_timeout
Таймаут (в секундах) перед началом слияния с повторной компрессией. В течение этого времени ClickHouse пытается извлечь повторно сжатую часть из реплики, которой назначено это слияние с повторной компрессией.
Повторная компрессия обычно работает медленно, поэтому мы не начинаем слияние с повторной компрессией до истечения этого таймаута и пытаемся извлечь повторно сжатую часть из реплики.
Возможные значения:
- Любое положительное целое число.
Значение по умолчанию: 7200
always_fetch_merged_part
Если true, эта реплика никогда не объединяет части и всегда загружает объединенные части из других реплик.
Возможные значения:
- true, false
Значение по умолчанию: false
max_suspicious_broken_parts
Максимальное количество поврежденных частей, если больше - автоматическое удаление запрещено.
Возможные значения:
- Любое положительное целое число.
Значение по умолчанию: 100
max_suspicious_broken_parts_bytes
Максимальный размер всех поврежденных частей, если больше - автоматическое удаление запрещено.
Возможные значения:
- Любое положительное целое число.
Значение по умолчанию: 1,073,741,824
max_files_to_modify_in_alter_columns
Не применять ALTER, если количество файлов для модификации (удаления, добавления) превышает эту настройку.
Возможные значения:
- Любое положительное целое число.
Значение по умолчанию: 75
max_files_to_remove_in_alter_columns
Не применять ALTER, если количество файлов для удаления превышает эту настройку.
Возможные значения:
- Любое положительное целое число.
Значение по умолчанию: 50
replicated_max_ratio_of_wrong_parts
Если отношение неправильных частей к общему количеству частей меньше этого - разрешить запуск.
Возможные значения:
- Float, 0.0 - 1.0
Значение по умолчанию: 0.5
replicated_max_parallel_fetches_for_host
Ограничить параллельные извлечения с конечной точки (фактически размер пула).
Возможные значения:
- Любое положительное целое число.
Значение по умолчанию: 15
replicated_fetches_http_connection_timeout
Таймаут подключения HTTP для запросов на извлечение частей. Унаследован от профиля по умолчанию http_connection_timeout
, если не установлен явно.
Возможные значения:
- Любое положительное целое число.
Значение по умолчанию: Унаследован от профиля по умолчанию http_connection_timeout
, если не установлен явно.
replicated_can_become_leader
Если true, реплики реплицированных таблиц на этом узле попытаются получить лидерство.
Возможные значения:
- true, false
Значение по умолчанию: true
zookeeper_session_expiration_check_period
Период проверки истечения сессии ZooKeeper, в секундах.
Возможные значения:
- Любое положительное целое число.
Значение по умолчанию: 60
detach_old_local_parts_when_cloning_replica
Не удалять старые локальные части при восстановлении потерянной реплики.
Возможные значения:
- true, false
Значение по умолчанию: true
replicated_fetches_http_connection_timeout
Таймаут соединения HTTP (в секундах) для запросов на извлечение частей. Унаследован от профиля по умолчанию http_connection_timeout если не установлен явно.
Возможные значения:
- Любое положительное целое число.
- 0 - Использовать значение
http_connection_timeout
.
Значение по умолчанию: 0.
replicated_fetches_http_send_timeout
Таймаут отправки HTTP (в секундах) для запросов на извлечение частей. Унаследован от профиля по умолчанию http_send_timeout если не установлен явно.
Возможные значения:
- Любое положительное целое число.
- 0 - Использовать значение
http_send_timeout
.
Значение по умолчанию: 0.
replicated_fetches_http_receive_timeout
Таймаут получения HTTP (в секундах) для запросов на извлечение частей. Унаследован от профиля по умолчанию http_receive_timeout если не установлен явно.
Возможные значения:
- Любое положительное целое число.
- 0 - Использовать значение
http_receive_timeout
.
Значение по умолчанию: 0.
max_replicated_fetches_network_bandwidth
Ограничивает максимальную скорость обмена данными по сети в байтах в секунду для реплицированных извлечений. Эта настройка применяется к конкретной таблице, в отличие от настройки max_replicated_fetches_network_bandwidth_for_server, которая применяется к серверу.
Вы можете ограничить как сеть сервера, так и сеть для конкретной таблицы, но для этого значение настройки на уровне таблицы должно быть меньше значения на уровне сервера. В противном случае сервер учитывает только настройку max_replicated_fetches_network_bandwidth_for_server
.
Настройка не соблюдается с идеальной точностью.
Возможные значения:
- Положительное целое число.
- 0 — Неограниченно.
Значение по умолчанию: 0
.
Использование
Может быть использовано для регулирования скорости при репликации данных для добавления или замены новых узлов.
max_replicated_sends_network_bandwidth
Ограничивает максимальную скорость обмена данными по сети в байтах в секунду для реплицированных отправок. Эта настройка применяется к конкретной таблице, в отличие от настройки max_replicated_sends_network_bandwidth_for_server, которая применяется к серверу.
Вы можете ограничить как сеть сервера, так и сеть для конкретной таблицы, но для этого значение настройки на уровне таблицы должно быть меньше значения на уровне сервера. В противном случае сервер учитывает только настройку max_replicated_sends_network_bandwidth_for_server
.
Настройка не соблюдается с идеальной точностью.
Возможные значения:
- Положительное целое число.
- 0 — Неограниченно.
Значение по умолчанию: 0
.
Использование
Может быть использовано для регулирования скорости при репликации данных для добавления или замены новых узлов.
old_parts_lifetime
Время (в секундах) хранения неактивных частей для защиты от потери данных во время спонтанных перезагрузок сервера.
Возможные значения:
- Любое положительное целое число.
Значение по умолчанию: 480.
После объединения нескольких частей в новую часть ClickHouse помечает оригинальные части как неактивные и удаляет их только через old_parts_lifetime
секунд.
Неактивные части удаляются, если они не используются текущими запросами, т.е. если refcount
части равен 1.
fsync
не вызывается для новых частей, поэтому некоторое время новые части существуют только в памяти сервера (кэше ОС). Если сервер спонтанно перезагрузится, новые части могут быть потеряны или повреждены.
Для защиты данных неактивные части не удаляются немедленно.
Во время запуска ClickHouse проверяет целостность частей.
Если объединенная часть повреждена, ClickHouse возвращает неактивные части в активный список и позже снова их объединяет. Затем поврежденная часть переименовывается (добавляется префикс broken_
) и перемещается в папку detached
.
Если объединенная часть не повреждена, то оригинальные неактивные части переименовываются (добавляется префикс ignored_
) и перемещаются в папку detached
.
Значение по умолчанию для dirty_expire_centisecs
(настройка ядра Linux) равно 30 секунд (максимальное время, в течение которого записанные данные хранятся только в ОЗУ), но при сильной нагрузке на дисковую систему данные могут быть записаны гораздо позже. Экспериментально было выбрано значение 480 секунд для old_parts_lifetime
, в течение которого новая часть гарантированно будет записана на диск.
max_bytes_to_merge_at_max_space_in_pool
Максимальный общий размер частей (в байтах), которые могут быть объединены в одну часть, если доступны достаточные ресурсы. Соответствует максимально возможному размеру части, создаваемой автоматическим фоновым слиянием.
Возможные значения:
- Любое положительное целое число.
Значение по умолчанию: 161061273600 (150 ГБ).
Планировщик слияний периодически анализирует размеры и количество частей в партициях, и если в пуле достаточно свободных ресурсов, он запускает фоновые слияния.
Слияния происходят, пока общий размер исходных частей больше max_bytes_to_merge_at_max_space_in_pool
.
Слияния, инициированные OPTIMIZE FINAL, игнорируют max_bytes_to_merge_at_max_space_in_pool
(учитывается только свободное дисковое пространство).
max_bytes_to_merge_at_min_space_in_pool
Максимальный общий размер частей (в байтах), которые могут быть объединены в одну часть, при наличии минимальных ресурсов в фоновом пуле.
Возможные значения:
- Любое положительное целое число.
Значение по умолчанию: 1048576 (1 МБ)
max_bytes_to_merge_at_min_space_in_pool
определяет максимальный общий размер частей, которые могут быть объединены, несмотря на нехватку доступного дискового пространства (в пуле). Это необходимо для уменьшения числа маленьких частей и вероятности ошибок Слишком много частей
.
Слияния резервируют дисковое пространство вдвое больше общего размера объединенных частей. Таким образом, при небольшом объеме свободного дискового пространства может возникнуть ситуация, когда свободное место есть, но оно уже зарезервировано для текущих больших слияний, и другие слияния не могут начаться, а количество маленьких частей растет с каждой вставкой.
merge_max_block_size
Количество строк, которые считываются из объединенных частей в память.
Возможные значения:
- Любое положительное целое число.
Значение по умолчанию: 8192
Слияние считывает строки из частей блоками по merge_max_block_size
строк, затем объединяет и записывает результат в новую часть. Читаемый блок помещается в RAM, поэтому merge_max_block_size
влияет на размер ОЗУ, необходимый для слияния. Таким образом, слияния могут потреблять большое количество ОЗУ для таблиц с очень широкими строками (если средний размер строки 100 КБ, то при слиянии 10 частей (100 КБ * 10 * 8192) = ~ 8 ГБ ОЗУ). Уменьшая merge_max_block_size
, вы можете уменьшить количество ОЗУ, необходимое для слияния, но это замедлит процесс слияния.
number_of_free_entries_in_pool_to_lower_max_size_of_merge
Когда в пуле (или реплицированной очереди) оказывается меньше указанного количества свободных записей, начинается снижение максимального размера обрабатываемого слияния (или который нужно поставить в очередь). Это необходимо для того, чтобы позволить малым слияниям обрабатываться - чтобы не заполнять пул длительными слияниями.
Возможные значения:
- Любое положительное целое число.
Значение по умолчанию: 8
number_of_free_entries_in_pool_to_execute_mutation
Когда в пуле оказывается меньше указанного количества свободных записей, не выполняйте мутации частей. Это необходимо для того, чтобы оставить свободные потоки для регулярных слияний и избежать "Слишком много частей".
Возможные значения:
- Любое положительное целое число.
Значение по умолчанию: 20
Использование
Значение настройки number_of_free_entries_in_pool_to_execute_mutation
должно быть меньше значения background_pool_size * background_merges_mutations_concurrency_ratio. В противном случае, ClickHouse выдает исключение.
max_part_loading_threads
Максимальное количество потоков, которые читают части, когда ClickHouse запускается.
Возможные значения:
- Любое положительное целое число.
Значение по умолчанию: auto (количество ядер CPU).
Во время запуска ClickHouse считывает все части всех таблиц (считывает файлы с метаданными частей), чтобы построить список всех частей в памяти. В некоторых системах с большим количеством частей этот процесс может занять много времени, и его можно сократить, увеличив max_part_loading_threads
(если этот процесс не зависит от CPU и дискового ввода-вывода).
max_partitions_to_read
Ограничивает максимальное количество разделов, которые можно получить в одном запросе.
Значение настройки, указанное при создании таблицы, может быть переопределено на уровне запроса.
Возможные значения:
- Любое положительное целое число.
Значение по умолчанию: -1 (без ограничений).
Вы также можете задать настройку сложности запроса max_partitions_to_read на уровне запроса / сессии / профиля.
min_age_to_force_merge_seconds
Объединяет части, если каждая часть в диапазоне старше значения min_age_to_force_merge_seconds
.
По умолчанию игнорирует настройку max_bytes_to_merge_at_max_space_in_pool
(см. enable_max_bytes_limit_for_min_age_to_force_merge
).
Возможные значения:
- Положительное целое число.
Значение по умолчанию: 0 — Отключено.
min_age_to_force_merge_on_partition_only
Должно ли значение min_age_to_force_merge_seconds
применяться только ко всему разделу, а не к его подмножеству.
По умолчанию игнорирует настройку max_bytes_to_merge_at_max_space_in_pool
(см. enable_max_bytes_limit_for_min_age_to_force_merge
).
Возможные значения:
- true, false
Значение по умолчанию: false
enable_max_bytes_limit_for_min_age_to_force_merge
Должны ли настройки min_age_to_force_merge_seconds
и min_age_to_force_merge_on_partition_only
учитывать настройку max_bytes_to_merge_at_max_space_in_pool
.
Возможные значения:
- true, false
Значение по умолчанию: false
number_of_free_entries_in_pool_to_execute_optimize_entire_partition
Когда в пуле остается меньше заданного числа свободных записей, не выполнять оптимизацию всего раздела в фоновом режиме (эта задача создается при установке min_age_to_force_merge_seconds
и включении min_age_to_force_merge_on_partition_only
). Это необходимо, чтобы оставить свободные потоки для регулярных слияний и избежать "Слишком много частей".
Возможные значения:
- Положительное целое число.
Значение по умолчанию: 25
Значение настройки number_of_free_entries_in_pool_to_execute_optimize_entire_partition
должно быть меньше значения background_pool_size * background_merges_mutations_concurrency_ratio. В противном случае ClickHouse выдает исключение.
enable_replacing_merge_with_cleanup_for_min_age_to_force_merge
Следует ли использовать CLEANUP-слияния для ReplacingMergeTree при объединении разделов в одну часть. Требует активации allow_experimental_replacing_merge_with_cleanup
, min_age_to_force_merge_seconds
и min_age_to_force_merge_on_partition_only
.
Возможные значения:
- true, false
Значение по умолчанию: false
allow_floating_point_partition_key
Включает возможность использования числа с плавающей запятой в качестве ключа раздела.
Возможные значения:
- 0 — Ключ раздела с плавающей запятой не разрешен.
- 1 — Ключ раздела с плавающей запятой разрешен.
Значение по умолчанию: 0
.
check_sample_column_is_correct
Включает проверку при создании таблицы, что тип данных столбца для выборки или выражения выборки корректен. Тип данных должен быть одним из беззнаковых целых типов: UInt8
, UInt16
, UInt32
, UInt64
.
Возможные значения:
- true — Проверка включена.
- false — Проверка отключена при создании таблицы.
Значение по умолчанию: true
.
По умолчанию сервер ClickHouse проверяет при создании таблицы тип данных столбца для выборки или выражения выборки. Если у вас уже есть таблицы с некорректным выражением выборки и вы не хотите, чтобы сервер выдавал исключение при запуске, установите check_sample_column_is_correct
в false
.
min_bytes_to_rebalance_partition_over_jbod
Устанавливает минимальное количество байтов для включения балансировки при распределении новых больших частей по дискам объема JBOD.
Возможные значения:
- Положительное целое число.
- 0 — Балансировка отключена.
Значение по умолчанию: 0
.
Использование
Значение настройки min_bytes_to_rebalance_partition_over_jbod
не должно быть меньше значения max_bytes_to_merge_at_max_space_in_pool / 1024. В противном случае ClickHouse выдает исключение.
detach_not_byte_identical_parts
Включает или отключает отделение части данных на реплике после слияния или мутации, если она не байтово идентична частям данных на других репликах. Если отключено, часть данных удаляется. Активируйте эту настройку, если хотите проанализировать такие части позже.
Настройка применяется к таблицам MergeTree
с включенной репликацией данных.
Возможные значения:
- 0 — Части удаляются.
- 1 — Части отделяются.
Значение по умолчанию: 0
.
merge_tree_clear_old_temporary_directories_interval_seconds
Устанавливает интервал в секундах для ClickHouse для выполнения очистки старых временных директорий.
Возможные значения:
- Любое положительное целое число.
Значение по умолчанию: 60
секунд.
merge_tree_clear_old_parts_interval_seconds
Устанавливает интервал в секундах для ClickHouse для выполнения очистки старых частей, WAL и мутаций.
Возможные значения:
- Любое положительное целое число.
Значение по умолчанию: 1
секунда.
max_concurrent_queries
Максимальное количество одновременно выполняемых запросов, связанных с таблицей MergeTree. Запросы по-прежнему будут ограничены другими настройками max_concurrent_queries
.
Возможные значения:
- Положительное целое число.
- 0 — Без ограничений.
Значение по умолчанию: 0
(без ограничений).
Пример
min_marks_to_honor_max_concurrent_queries
Минимальное количество меток, прочитанных запросом, для применения настройки max_concurrent_queries. Обратите внимание, что запросы по-прежнему будут ограничены другими настройками max_concurrent_queries
.
Возможные значения:
- Положительное целое число.
- 0 — Отключено (
ограничение max_concurrent_queries не применяется ни к одному запросу
).
Значение по умолчанию: 0
(ограничение никогда не применяется).
Пример
ratio_of_defaults_for_sparse_serialization
Минимальное соотношение количества значений по умолчанию к количеству всех значений в столбце. Установка этого значения вызывает хранение столбца с использованием разреженной сериализации.
Если столбец разрежен (содержит в основном нули), ClickHouse может закодировать его в разреженном формате и автоматически оптимизировать вычисления - данные не требуют полной декомпрессии во время запросов. Чтобы включить эту разреженную сериализацию, установите значение ratio_of_defaults_for_sparse_serialization
меньше 1.0. Если значение больше или равно 1.0, то столбцы всегда будут записываться с использованием нормальной полной сериализации.
Возможные значения:
- Число с плавающей запятой от 0 до 1 для включения разреженной сериализации
- 1.0 (или больше), если вы не хотите использовать разреженную сериализацию
Значение по умолчанию: 0.9375
Пример
Обратите внимание, что столбец s
в следующей таблице является пустой строкой для 95% строк. В my_regular_table
мы не используем разреженную сериализацию, а в my_sparse_table
мы устанавливаем ratio_of_defaults_for_sparse_serialization
в 0.95:
Обратите внимание, что столбец s
в my_sparse_table
требует меньше места на диске:
Вы можете проверить, использует ли столбец разреженное кодирование, просмотрев столбец serialization_kind
таблицы system.parts_columns
:
Вы можете увидеть, какие части s
были сохранены с использованием разреженной сериализации:
replace_long_file_name_to_hash
Если имя файла для столбца слишком длинное (более max_file_name_length
байт), замените его на SipHash128. Значение по умолчанию: false
.
max_file_name_length
Максимальная длина имени файла для его сохранения без хеширования. Действует только в том случае, если включена настройка replace_long_file_name_to_hash
. Значение этой настройки не включает длину расширения файла. Поэтому рекомендуется устанавливать его ниже максимальной длины имени файла (обычно 255 байт) с некоторым запасом, чтобы избежать ошибок файловой системы. Значение по умолчанию: 127.
allow_experimental_block_number_column
Сохраняет виртуальный столбец _block_number
при слияниях.
Значение по умолчанию: false.
exclude_deleted_rows_for_part_size_in_merge
Если включено, будет использоваться оценочный фактический размер частей данных (т.е. исключая те строки, которые были удалены через DELETE FROM
) при выборе частей для слияния. Обратите внимание, что это поведение срабатывает только для частей данных, затронутых DELETE FROM
, выполненным после включения этой настройки.
Возможные значения:
- true, false
Значение по умолчанию: false
Смотрите также
- load_existing_rows_count_for_old_parts настройка
load_existing_rows_count_for_old_parts
Если включено вместе с exclude_deleted_rows_for_part_size_in_merge, количество удаленных строк для существующих частей данных будет рассчитано во время запуска таблицы. Обратите внимание, что это может замедлить загрузку таблицы на старте.
Возможные значения:
- true, false
Значение по умолчанию: false
Смотрите также
use_compact_variant_discriminators_serialization
Включает компактный режим для бинарной сериализации дискриминаторов в типе данных Variant. Этот режим позволяет использовать значительно меньше памяти для хранения дискриминаторов в частях, когда в основном присутствует один вариант или много значений NULL.
Значение по умолчанию: true
merge_workload
Используется для регулирования того, как ресурсы используются и распределяются между слияниями и другими нагрузками. Указанное значение используется как значение настройки workload
для фоновых слияний этой таблицы. Если не указано (пустая строка), используется значение настройки сервера merge_workload
.
Значение по умолчанию: пустая строка
Смотрите также
mutation_workload
Используется для регулирования того, как ресурсы используются и распределяются между мутациями и другими нагрузками. Указанное значение используется как значение настройки workload
для фоновых мутаций этой таблицы. Если не указано (пустая строка), используется значение настройки сервера mutation_workload
.
Значение по умолчанию: пустая строка
Смотрите также
optimize_row_order
Контролирует, следует ли оптимизировать порядок строк во время вставок, чтобы повысить сжимаемость вновь вставленной части таблицы.
Это имеет эффект только для обычных таблиц с движком MergeTree. Ничего не делает для специализированных таблиц движка MergeTree (например, CollapsingMergeTree).
Таблицы MergeTree (по желанию) сжимаются с использованием кодеков сжатия. Общие кодеки сжатия, такие как LZ4 и ZSTD, достигают максимальных коэффициентов сжатия, если данные имеют закономерности. Длинные последовательности одного и того же значения, как правило, хорошо сжимаются.
Если эта настройка включена, ClickHouse пытается сохранить данные в новых вставленных частях в порядке строк, который минимизирует количество последовательностей равных значений по всем столбцам новой части таблицы. Другими словами, небольшое количество последовательностей равных значений означает, что отдельные последовательности длинные и хорошо сжимаются.
Найти оптимальный порядок строк с вычислительной точки зрения невозможно (NP трудно). Поэтому ClickHouse использует эвристику, чтобы быстро найти порядок строк, который по-прежнему улучшает коэффициенты сжатия по сравнению с оригинальным порядком строк.
Эвристика для нахождения порядка строк
В общем, возможно свободно перемешивать строки таблицы (или части таблицы), поскольку SQL считает одинаковые таблицы (части таблицы) в разном порядке строк эквивалентными.
Эта свобода перемешивания строк ограничивается, когда для таблицы определяется первичный ключ.
В ClickHouse первичный ключ C1, C2, ..., CN
требует, чтобы строки таблицы были отсортированы по столбцам C1
, C2
, ... Cn
(кластерный индекс).
В результате строки могут быть перемешаны только внутри "эквивалентных классов" строк, т.е. строк, которые имеют одинаковые значения в их столбцах первичного ключа.
Интуиция заключается в том, что первичные ключи с высокой кардинальностью, например, первичные ключи, содержащие столбец временной метки DateTime64
, приводят к множеству маленьких классов эквивалентности.
Аналогично, таблицы с первичным ключом с низкой кардинальностью создают немного и большие классы эквивалентности.
Таблица без первичного ключа представляет собой крайний случай одного класса эквивалентности, охватывающего все строки.
Чем меньше и больше классы эквивалентности, тем выше степень свободы при повторной перетасовке строк.
Эвристики, применяемые для нахождения лучшего порядка строк внутри каждого класса эквивалентности, предложены Д. Лемиром, О. Казером в Переупорядочивание столбцов для меньших индексов и основаны на сортировке строк внутри каждого класса эквивалентности по возрастающей кардинальности столбцов, не являющихся первичными ключами. Она выполняет три шага:
- Найдите все классы эквивалентности на основе значений строк в столбцах первичного ключа.
- Для каждого класса эквивалентности вычислите (обычно оцените) кардинальность столбцов, не являющихся первичными ключами.
- Для каждого класса эквивалентности отсортируйте строки в порядке возрастания кардинальности столбца, не являющегося первичным ключом.
Если включено, операции вставки несут дополнительные затраты CPU для анализа и оптимизации порядка строк новых данных. Операции INSERT ожидаются, что займут на 30-50% больше времени в зависимости от характеристик данных. Коэффициенты сжатия LZ4 или ZSTD, в среднем, улучшаются на 20-40%.
Эта настройка работает лучше всего для таблиц без первичного ключа или с первичным ключом низкой кардинальности, т.е. таблицы с небольшим количеством различных значений первичного ключа.
Первичные ключи высокой кардинальности, например, с участием столбцов временной метки типа DateTime64
, как ожидается, не извлекут выгоду от этой настройки.
lightweight_mutation_projection_mode
По умолчанию легковесное удаление DELETE
не работает для таблиц с проекциями. Это связано с тем, что строки в проекции могут быть затронуты операцией DELETE
. Поэтому значение по умолчанию будет throw
.
Однако эта опция может изменить поведение. При значении либо drop
, либо rebuild
, удаления будут работать с проекциями. drop
удалит проекцию, поэтому это может быть быстрым в текущем запросе, так как проекция удаляется, но медленным в будущих запросах, так как никакая проекция не прикреплена.
rebuild
перестроит проекцию, что может повлиять на производительность текущего запроса, но может ускорить будущие запросы. Хорошей новостью является то, что эти опции будут работать только на уровне частей,
что означает, что проекции в части, которые не будут затронуты, останутся нетронутыми вместо того, чтобы вызвать какое-либо действие, такое как удаление или перестройка.
Возможные значения:
- throw, drop, rebuild
Значение по умолчанию: throw
deduplicate_merge_projection_mode
Следует ли разрешить создание проекции для таблицы с не классическим MergeTree, т.е. не (Replicated, Shared) MergeTree. Игнорирование параметра предназначено исключительно для совместимости, что может привести к некорректному ответу. В противном случае, если разрешено, какое действие должно быть предпринято при объединении проекций, либо удалить, либо перестроить. Таким образом, классический MergeTree будет игнорировать эту настройку.
Он также контролирует OPTIMIZE DEDUPLICATE
, но оказывает влияние на всех членов семейства MergeTree. Аналогично опции lightweight_mutation_projection_mode
, это также уровень частей.
Возможные значения:
- ignore, throw, drop, rebuild
Значение по умолчанию: throw
min_free_disk_bytes_to_perform_insert
Минимальное количество байтов, которое должно быть свободным на дисковом пространстве, чтобы вставить данные. Если количество доступных свободных байтов меньше min_free_disk_bytes_to_perform_insert
, генерируется исключение, и вставка не выполняется. Обратите внимание, что эта настройка:
- принимает во внимание настройку
keep_free_space_bytes
. - не учитывает объем данных, который будет записан операцией
INSERT
. - проверяется только в случае, если указано положительное (ненулевое) количество байтов.
Возможные значения:
- Любое положительное целое число.
Значение по умолчанию: 0 байт.
Обратите внимание, что если и min_free_disk_bytes_to_perform_insert
, и min_free_disk_ratio_to_perform_insert
указаны, ClickHouse будет учитывать то значение, которое позволит выполнить вставку на большем количестве свободной памяти.
min_free_disk_ratio_to_perform_insert
Минимальное соотношение свободного к общему дисковому пространству для выполнения INSERT
. Должно быть числом с плавающей запятой от 0 до 1. Обратите внимание, что эта настройка:
- принимает во внимание настройку
keep_free_space_bytes
. - не учитывает объем данных, который будет записан операцией
INSERT
. - проверяется только в случае, если указано положительное (ненулевое) соотношение.
Возможные значения:
- Число с плавающей запятой, 0.0 - 1.0
Значение по умолчанию: 0.0
Обратите внимание, что если и min_free_disk_ratio_to_perform_insert
, и min_free_disk_bytes_to_perform_insert
указаны, ClickHouse будет учитывать то значение, которое позволит выполнить вставку на большем количестве свободной памяти.
allow_experimental_reverse_key
Включает поддержку порядка сортировки по убыванию в ключах сортировки MergeTree. Эта настройка особенно полезна для анализа временных рядов и запросов Top-N, позволяя хранить данные в обратном хронологическом порядке для оптимизации производительности запросов.
С включенной allow_experimental_reverse_key
вы можете определить порядок сортировки по убыванию в предложении ORDER BY
таблицы MergeTree. Это позволяет использовать более эффективные оптимизации ReadInOrder
вместо ReadInReverseOrder
для запросов по убыванию.
Пример
При использовании ORDER BY time DESC
в запросе применяется ReadInOrder
.
Значение по умолчанию: false
cache_populated_by_fetch
Эта настройка применяется только к ClickHouse Cloud.
Когда cache_populated_by_fetch
отключен (настройка по умолчанию), новые части данных загружаются в кэш только при выполнении запроса, который требует этих частей.
Если включено, cache_populated_by_fetch
заставляет все узлы загрузить новые части данных из хранилища в свой кэш, не дожидаясь, пока какой-либо запрос вызовет такое действие.
Значение по умолчанию: false
Смотрите также
add_implicit_sign_column_constraint_for_collapsing_engine
Если true, добавляет неявное ограничение для столбца sign
таблицы CollapsingMergeTree или VersionedCollapsingMergeTree, позволяя только допустимые значения (1
и -1
).
Значение по умолчанию: false
add_minmax_index_for_numeric_columns
При включенной настройке для всех числовых столбцов таблицы добавляются мин-макс (пропускающие) индексы.
Значение по умолчанию: false.
add_minmax_index_for_string_columns
При включенной настройке для всех строковых столбцов таблицы добавляются мин-макс (пропускающие) индексы.
Значение по умолчанию: false.
materialize_skip_indexes_on_merge
При включенной настройке слияния создаются и хранятся пропускающие индексы для новых частей.
Значение по умолчанию: true
assign_part_uuids
При включенной настройке уникальный идентификатор части будет назначен каждой новой части. Перед включением проверьте, что все реплики поддерживают UUID версии 4.
Значение по умолчанию: 0.
allow_experimental_replacing_merge_with_cleanup
Разрешает экспериментальные CLEANUP-слияния для ReplacingMergeTree с колонкой is_deleted
. При включенной настройке позволяет вручную объединить все части в разделе до одной части и удалить любые удаленные строки с помощью команды OPTIMIZE ... FINAL CLEANUP
.
Также позволяет таким слияниям происходить автоматически в фоновом режиме с помощью настроек min_age_to_force_merge_seconds
, min_age_to_force_merge_on_partition_only
и enable_replacing_merge_with_cleanup_for_min_age_to_force_merge
.
Значение по умолчанию: false