Настройки таблиц 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
Минимальный объем данных для операции слияния, необходимый для использования прямого I/O доступа к диску хранения.
При слиянии частей данных ClickHouse рассчитывает общий объем хранения всех данных, которые будут объединены.
Если объем превышает min_merge_bytes_to_use_direct_io
байт, ClickHouse читает и записывает данные на диск хранения, используя интерфейс прямого I/O (O_DIRECT
опция).
Если min_merge_bytes_to_use_direct_io = 0
, то прямой I/O отключен.
Значение по умолчанию: 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
замедляет Inserts
, потому что необходимо сравнивать больше записей.
Контрольная сумма вычисляется из составления имен полей и типов и данных вставленной части (поток байтов).
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, false
Значение по умолчанию: false.
Блок, содержащий несколько асинхронных вставок, сгенерирует несколько контрольных сумм. Когда некоторые из вставок дублируются, управляющий вернет только одну дублированную контрольную сумму в одном 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, 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
Ограничение параллельных выборок с endpoints (фактически размер пула).
Возможные значения:
- Любое положительное целое число.
Значение по умолчанию: 15
replicated_fetches_http_connection_timeout
Таймаут HTTP соединения для запросов на получение частей. Унаследовано от профиля по умолчанию http_connection_timeout
, если не установлено явно.
Возможные значения:
- Любое положительное целое число.
Значение по умолчанию: унаследовано от профиля по умолчанию http_connection_timeout
, если не установлено явно.
replicated_can_become_leader
Если истинно, реплики реплицируемых таблиц на этом узле будут пытаться получить лидерство.
Возможные значения:
- 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
строк, затем объединяет и записывает результат в новую часть. Читаемый блок помещается в ОЗУ, поэтому 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 выбросит исключение.
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
, приводят к множеству мелких классов эквивалентности. Аналогично, таблицы с первичным ключом низкой кардинальности создают немного крупных классов эквивалентности. Таблица без первичного ключа представляет собой крайний случай единственного класса эквивалентности, охватывающего все строки.
Чем меньше и больше классы эквивалентности, тем выше степень свободы при повторном перемешивании строк.
Эвристика, применяемая для нахождения лучшего порядка строк внутри каждого класса эквивалентности, предложена D. Лемиром, О. Касером в Reordering columns for smaller indexes и основана на сортировке строк внутри каждого класса эквивалентности по возрастанию кардинальности колонок, не входящих в первичный ключ. Она выполняет три шага:
- Найдите все классы эквивалентности на основе значений строк в колонках первичного ключа.
- Для каждого класса эквивалентности рассчитайте (обычно оцените) кардинальности колонок, не входящих в первичный ключ.
- Для каждого класса эквивалентности отсортируйте строки в порядке возрастания кардинальности колонок, не входящих в первичный ключ.
Если включено, операции вставки несут дополнительные затраты на ЦП для анализа и оптимизации порядка строк новых данных. Ожидается, что 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.