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

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

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

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

Если включено, операции вставки несут дополнительные затраты на ЦП для анализа и оптимизации порядка строк новых данных. Ожидается, что 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.