Перейти к основному содержимому
Перейти к основному содержимому

Настройки таблиц 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

Если включено вместе с 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, приводят к множеству маленьких классов эквивалентности. Аналогично, таблицы с первичным ключом с низкой кардинальностью создают немного и большие классы эквивалентности. Таблица без первичного ключа представляет собой крайний случай одного класса эквивалентности, охватывающего все строки.

Чем меньше и больше классы эквивалентности, тем выше степень свободы при повторной перетасовке строк.

Эвристики, применяемые для нахождения лучшего порядка строк внутри каждого класса эквивалентности, предложены Д. Лемиром, О. Казером в Переупорядочивание столбцов для меньших индексов и основаны на сортировке строк внутри каждого класса эквивалентности по возрастающей кардинальности столбцов, не являющихся первичными ключами. Она выполняет три шага:

  1. Найдите все классы эквивалентности на основе значений строк в столбцах первичного ключа.
  2. Для каждого класса эквивалентности вычислите (обычно оцените) кардинальность столбцов, не являющихся первичными ключами.
  3. Для каждого класса эквивалентности отсортируйте строки в порядке возрастания кардинальности столбца, не являющегося первичным ключом.

Если включено, операции вставки несут дополнительные затраты 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