> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Другие настройки таблиц семейства MergeTree

> Настройки таблиц семейства MergeTree в ClickHouse в группе «Другое», созданной автоматически.

export const SettingsInfoBlock = ({type, default_value, changeable_without_restart}) => {
  return <div className="not-prose" style={{
    display: "flex",
    flexWrap: "wrap",
    alignItems: "baseline",
    columnGap: "0.5rem",
    rowGap: "0.125rem",
    margin: "0.375rem 0",
    fontSize: "0.8125rem",
    lineHeight: "1.125rem"
  }}>
      <div style={{
    fontWeight: 600,
    opacity: 0.72
  }}>Тип</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{type}</div>
      <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>По умолчанию</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{default_value}</div>
      {changeable_without_restart && <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>
          Изменяется без перезапуска
        </div>}
      {changeable_without_restart && <div style={{
    overflowWrap: "anywhere"
  }}>
          {changeable_without_restart}
        </div>}
    </div>;
};

export const ExperimentalBadge = () => {
  return <div className="experimentalBadge">
            <div className="experimentalIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.25" d="M5.5 2H10.5" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M9.50015 2V6.19625L13.4283 12.7425C13.4738 12.8183 13.4985 12.9049 13.4996 12.9934C13.5008 13.0818 13.4785 13.169 13.435 13.246C13.3914 13.323 13.3283 13.3871 13.2519 13.4317C13.1755 13.4764 13.0886 13.4999 13.0002 13.5H3.00015C2.91164 13.5 2.8247 13.4766 2.74822 13.432C2.67174 13.3874 2.60847 13.3233 2.56487 13.2463C2.52126 13.1693 2.49889 13.082 2.50004 12.9935C2.50119 12.905 2.52582 12.8184 2.5714 12.7425L6.50015 6.19625V2" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M4.47656 9.56754C5.30344 9.41254 6.47656 9.47942 7.99969 10.25C10.0153 11.2707 11.4216 11.0569 12.2184 10.7282" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>
        </div>
            Экспериментальная возможность. <u><a href="/docs/docs/beta-and-experimental-features#experimental-features">Подробнее.</a></u>
        </div>;
};

Эти настройки доступны в [system.merge\_tree\_settings](/docs/ru/reference/system-tables/merge_tree_settings) и автоматически генерируются на основе исходного кода ClickHouse.

<div id="adaptive_write_buffer_initial_size">
  ## adaptive\_write\_buffer\_initial\_size
</div>

<SettingsInfoBlock type="NonZeroUInt64" default_value="16384" />

Начальный размер адаптивного буфера для записи

<div id="add_implicit_sign_column_constraint_for_collapsing_engine">
  ## add\_implicit\_sign\_column\_constraint\_for\_collapsing\_engine
</div>

<SettingsInfoBlock type="Bool" default_value="0" />

Если значение равно `true`, добавляет неявное ограничение для столбца `sign` таблицы CollapsingMergeTree
или VersionedCollapsingMergeTree, разрешающее только допустимые значения (`1` и `-1`).

<div id="alter_column_secondary_index_mode">
  ## alter\_column\_secondary\_index\_mode
</div>

<SettingsInfoBlock type="AlterColumnSecondaryIndexMode" default_value="rebuild" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.12"},{"label": "rebuild"},{"label": "Изменено поведение: теперь разрешён ALTER `column` при наличии зависимых вторичных индексов"}]}]} />

Определяет, разрешать ли команды `ALTER`, изменяющие столбцы, на которые распространяются вторичные индексы, и какое действие выполнять, если
они разрешены. По умолчанию такие команды `ALTER` разрешены, а индексы перестраиваются.

Возможные значения:

* `rebuild` (по умолчанию): Перестраивает все вторичные индексы, затронутые столбцом в команде `ALTER`.
* `throw`: Запрещает любые команды `ALTER` для столбцов, на которые распространяются **явные** вторичные индексы, генерируя исключение. Неявные индексы не подпадают под это ограничение и будут перестроены.
* `drop`: Удаляет зависимые вторичные индексы. Новые части не будут содержать эти индексы, и для их повторного создания потребуется `MATERIALIZE INDEX`.
* `compatibility`: Соответствует исходному поведению: `throw` для `ALTER ... MODIFY COLUMN` и `rebuild` для `ALTER ... UPDATE/DELETE`.
* `ignore`: Предназначено для опытных пользователей. Оставляет индексы в несогласованном состоянии, что может привести к некорректным результатам запроса.

<div id="apply_patches_on_merge">
  ## apply\_patches\_on\_merge
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.5"},{"label": "1"},{"label": "новая настройка"}]}]} />

Если true, патч-части применяются при слияниях

<div id="assign_part_uuids">
  ## assign\_part\_uuids
</div>

<SettingsInfoBlock type="Bool" default_value="0" />

Если параметр включен, каждой новой части присваивается уникальный идентификатор.
Перед включением убедитесь, что все реплики поддерживают UUID версии 4.

<div id="auto_statistics_types">
  ## auto\_statistics\_types
</div>

<SettingsInfoBlock type="String" default_value="basic, uniq_v2" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.7"},{"label": "basic, uniq_v2"},{"label": "Тип статистики `minmax` объявлен устаревшим и заменён на `basic` (надмножество `minmax`) в автостатистике по умолчанию; `uniq` также заменён на `uniq_v2` для снижения накладных расходов при вставках и уменьшения потребления памяти"}]}, {"id": "row-2","items": [{"label": "26.4"},{"label": "minmax, uniq"},{"label": "Автостатистика включена по умолчанию"}]}, {"id": "row-3","items": [{"label": "25.10"},{"label": ""},{"label": "новая настройка"}]}]} />

Разделённый запятыми список типов статистики для автоматического вычисления на всех подходящих столбцах.
Поддерживаемые типы статистики: basic, tdigest, countmin, uniq, uniq\_v2.
Тип статистики `minmax` устарел: он является подмножеством `basic`, поэтому вместо него следует использовать `basic`.

<div id="background_task_preferred_step_execution_time_ms">
  ## background\_task\_preferred\_step\_execution\_time\_ms
</div>

<SettingsInfoBlock type="Milliseconds" default_value="50" />

Целевое время выполнения одного шага слияния или мутации. Может быть превышено, если
выполнение одного шага занимает больше времени

<div id="clean_deleted_rows">
  ## clean\_deleted\_rows
</div>

<SettingsInfoBlock type="CleanDeletedRows" default_value="Никогда" />

Устаревшая настройка, не имеет эффекта.

<div id="clone_replica_zookeeper_create_get_part_batch_size">
  ## clone\_replica\_zookeeper\_create\_get\_part\_batch\_size
</div>

<SettingsInfoBlock type="NonZeroUInt64" default_value="100" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.2"},{"label": "100"},{"label": "Новая настройка"}]}]} />

Размер батча для multi-create-запросов get-part к ZooKeeper при клонировании реплики.

<div id="compatibility_allow_sampling_expression_not_in_primary_key">
  ## compatibility\_allow\_sampling\_expression\_not\_in\_primary\_key
</div>

<SettingsInfoBlock type="Bool" default_value="0" />

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

<div id="compute_exact_num_defaults_for_sparse_columns">
  ## compute\_exact\_num\_defaults\_for\_sparse\_columns
</div>

<ExperimentalBadge />

<SettingsInfoBlock type="Bool" default_value="0" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.7"},{"label": "0"},{"label": "Новая настройка, включающая точный расчёт num_defaults для каждого столбца для pruning на основе разреженности и оптимизации trivial-count rewrite"}]}]} />

Вычислять точное количество значений по умолчанию для каждого столбца во время вставки
и слияния, а не использовать более дешёвую оценку на основе сэмплирования, которая применяется при выборе разреженной
сериализации. Требуется для `optimize_trivial_count_with_sparsity_filter`,
который использует сохранённый счётчик `num_defaults` (для столбца с типом Nullable
дополнительно требуется `nullable_serialization_version = 'allow_sparse'`).
Если оставить этот параметр отключённым, вставки/слияния останутся такими же быстрыми, как и раньше; при включении
добавляется проход O(rows) для каждого столбца, поддерживающего разреженное хранение.

<div id="deduplicate_merge_projection_mode">
  ## deduplicate\_merge\_projection\_mode
</div>

<SettingsInfoBlock type="DeduplicateMergeProjectionMode" default_value="throw" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "24.8"},{"label": "throw"},{"label": "Не разрешать создание несогласованной проекции"}]}]} />

Разрешает или запрещает создавать проекцию для таблицы с неклассическим MergeTree,
то есть не с (Replicated, Shared) MergeTree. Вариант `ignore` предназначен исключительно для
совместимости и может приводить к некорректным результатам. В остальных случаях, если это разрешено,
задаёт действие при merge проекций: `drop` или `rebuild`. Для классического
MergeTree эта настройка игнорируется. Она также управляет `OPTIMIZE DEDUPLICATE`,
но действует на все члены семейства MergeTree. Как и параметр
`lightweight_mutation_projection_mode`, она также работает на уровне части.

Возможные значения:

* `ignore`
* `throw`
* `drop`
* `rebuild`

<div id="deduplication_hashes_cache_update_wait_ms">
  ## deduplication\_hashes\_cache\_update\_wait\_ms
</div>

<SettingsInfoBlock type="Milliseconds" default_value="100" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.7"},{"label": "100"},{"label": "Новая настройка. Корректно названная замена для async_block_ids_cache_update_wait_ms; управляет тем, как долго операция вставки ждёт обновления унифицированного кэша deduplication_hashes."}]}]} />

Сколько времени каждая итерация вставки ждёт, пока кэш `deduplication_hashes` в памяти обновится до
более новой версии, прежде чем снова проверять его на наличие уже вставленных блоков. Кэш отражает
каталог `deduplication_hashes` в ClickHouse Keeper, чтобы вставки могли обнаруживать дубликаты без
round-trip к Keeper.

<div id="default_compression_codec">
  ## default\_compression\_codec
</div>

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.4"},{"label": ""},{"label": "Новая настройка"}]}]} />

Указывает кодек сжатия по умолчанию, который используется, если для конкретного столбца в объявлении таблицы он не задан.
Порядок выбора кодека сжатия для столбца:

1. Кодек сжатия, заданный для столбца в объявлении таблицы
2. Кодек сжатия, заданный в `default_compression_codec` (эта настройка)
3. Кодек сжатия по умолчанию, заданный в настройках `compression`
   Значение по умолчанию: пустая строка (не задано).

<div id="disk">
  ## disk
</div>

Название диска хранилища. Можно указать вместо политики хранения.

<div id="dynamic_serialization_version">
  ## dynamic\_serialization\_version
</div>

<SettingsInfoBlock type="MergeTreeDynamicSerializationVersion" default_value="v3" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.8"},{"label": "v2"},{"label": "Добавлена настройка для управления версиями сериализации Dynamic"}]}, {"id": "row-2","items": [{"label": "25.12"},{"label": "v3"},{"label": "Версия сериализации v3 для Dynamic включена по умолчанию для улучшения сериализации/десериализации"}]}]} />

Версия сериализации для типа данных Dynamic. Требуется для обеспечения совместимости.

Возможные значения:

* `v1`
* `v2`
* `v3`

<div id="enforce_index_structure_match_on_partition_manipulation">
  ## enforce\_index\_structure\_match\_on\_partition\_manipulation
</div>

<SettingsInfoBlock type="Bool" default_value="0" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "24.12"},{"label": "0"},{"label": "новая настройка"}]}]} />

Если этот параметр включен для целевой таблицы в запросе на манипуляцию с партицией
(`ATTACH/MOVE/REPLACE PARTITION`), индексы и проекции в исходной и целевой таблицах
должны быть идентичны. В противном случае целевая таблица может содержать
надмножество индексов и проекций исходной таблицы.

<div id="execute_merges_on_single_replica_time_threshold">
  ## execute\_merges\_on\_single\_replica\_time\_threshold
</div>

<SettingsInfoBlock type="Seconds" default_value="0" />

Если значение этой настройки больше нуля, только одна реплика сразу запускает
слияние, а остальные реплики ждут в течение этого времени, чтобы
скачать результат вместо локального выполнения слияния. Если выбранная реплика
не завершит слияние за это время, произойдет возврат к стандартному
поведению.

Возможные значения:

* Любое положительное целое число.

<div id="finished_mutations_to_keep">
  ## finished\_mutations\_to\_keep
</div>

<SettingsInfoBlock type="UInt64" default_value="100" />

Сколько записей о завершённых мутациях хранить. Если ноль, хранить
все.

<div id="force_read_through_cache_for_merges">
  ## force\_read\_through\_cache\_for\_merges
</div>

<ExperimentalBadge />

<SettingsInfoBlock type="Bool" default_value="0" />

Принудительно использовать файловый кэш для чтения при слияниях

<div id="initialization_retry_period">
  ## initialization\_retry\_period
</div>

<SettingsInfoBlock type="Seconds" default_value="60" />

Период между повторными попытками инициализации таблицы, в секундах.

<div id="kill_threads">
  ## kill\_threads
</div>

<SettingsInfoBlock type="UInt64" default_value="128" />

Устаревшая настройка, не имеет эффекта.

<div id="lightweight_mutation_projection_mode">
  ## lightweight\_mutation\_projection\_mode
</div>

<SettingsInfoBlock type="LightweightMutationProjectionMode" default_value="throw" />

По умолчанию легковесное удаление `DELETE` не работает для таблиц с
проекциями. Это связано с тем, что операция `DELETE` может затронуть
строки в проекции. Поэтому по умолчанию используется значение `throw`.
Однако этот параметр позволяет изменить поведение. Если задать значение
`drop` или `rebuild`, операции удаления будут работать с проекциями.
`drop` удаляет проекцию, поэтому это может ускорить текущий запрос,
поскольку проекция будет удалена, но замедлить последующие запросы, так
как проекция больше не будет доступна. `rebuild` перестраивает
проекцию, что может повлиять на производительность текущего запроса, но
может ускорить последующие запросы. Важно, что эти параметры
работают только на уровне частей данных: проекции в частях, которые не
затрагиваются, останутся нетронутыми, и для них не будут запускаться
такие действия, как drop или rebuild.

Возможные значения:

* `throw`
* `drop`
* `rebuild`

<div id="load_existing_rows_count_for_old_parts">
  ## load\_existing\_rows\_count\_for\_old\_parts
</div>

<SettingsInfoBlock type="Bool" default_value="0" />

Если этот параметр включен вместе с [exclude\_deleted\_rows\_for\_part\_size\_in\_merge](/docs/ru/reference/settings/merge-tree-settings/exclude#exclude_deleted_rows_for_part_size_in_merge),
при запуске таблицы будет вычисляться количество удаленных строк для существующих
частей данных. Обратите внимание, что это может замедлить загрузку таблицы при запуске.

Возможные значения:

* `true`
* `false`

**См. также**

* настройка [exclude\_deleted\_rows\_for\_part\_size\_in\_merge](/docs/ru/reference/settings/merge-tree-settings/exclude#exclude_deleted_rows_for_part_size_in_merge)

<div id="lock_acquire_timeout_for_background_operations">
  ## lock\_acquire\_timeout\_for\_background\_operations
</div>

<SettingsInfoBlock type="Seconds" default_value="120" />

Для фоновых операций, таких как слияния, мутации и т. д. Определяет, сколько секунд ждать, прежде чем попытка получить блокировку таблицы завершится неудачей.

<div id="mutation_workload">
  ## mutation\_workload
</div>

Используется для регулирования использования и распределения ресурсов между мутациями и
другими рабочими нагрузками. Указанное значение используется в качестве значения настройки `workload` для
фоновых мутаций этой таблицы. Если значение не указано (пустая строка), вместо него
используется настройка сервера `mutation_workload`.

**См. также**

* [Планирование рабочих нагрузок](/docs/ru/concepts/features/configuration/server-config/workload-scheduling)

<div id="non_replicated_deduplication_window">
  ## non\_replicated\_deduplication\_window
</div>

<SettingsInfoBlock type="UInt64" default_value="0" />

Количество последних вставленных блоков в нереплицируемой таблице
[MergeTree](/docs/ru/reference/engines/table-engines/mergetree-family/mergetree),
для которых сохраняются хеш-суммы для проверки на наличие дубликатов.

Возможные значения:

* Любое положительное целое число.
* `0` (отключает дедупликацию).

Используется механизм дедупликации, аналогичный механизму в реплицируемых таблицах (см.
настройку [replicated\_deduplication\_window](/docs/ru/reference/settings/merge-tree-settings/replicated-deduplication-window#replicated_deduplication_window)): хеш-сумма дедупликации
охватывает весь вставленный блок. Хеш-суммы записываются в
локальный файл на диске, а не в ClickHouse Keeper.

<div id="notify_newest_block_number">
  ## notify\_newest\_block\_number
</div>

<ExperimentalBadge />

<SettingsInfoBlock type="Bool" default_value="0" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.1"},{"label": "0"},{"label": "Синхронизация с Cloud"}]}]} />

Передавать SharedJoin или SharedSet номер последнего блока. Только в ClickHouse Cloud.

<div id="nullable_serialization_version">
  ## nullable\_serialization\_version
</div>

<SettingsInfoBlock type="MergeTreeNullableSerializationVersion" default_value="basic" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.12"},{"label": "basic"},{"label": "новая настройка"}]}]} />

Определяет метод сериализации для столбцов `Nullable(T)`.

Возможные значения:

* basic — Использовать стандартную сериализацию для `Nullable(T)`.

* allow\_sparse — Разрешить использование разреженного кодирования для `Nullable(T)`.

<div id="object_serialization_version">
  ## object\_serialization\_version
</div>

<SettingsInfoBlock type="MergeTreeObjectSerializationVersion" default_value="v3" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.8"},{"label": "v2"},{"label": "Добавлена настройка для управления версиями сериализации JSON"}]}, {"id": "row-2","items": [{"label": "25.12"},{"label": "v3"},{"label": "Версия сериализации JSON v3 включена по умолчанию для использования расширенной сериализации общих данных"}]}]} />

Версия сериализации для типа данных JSON. Необходимо для совместимости.

Возможные значения:

* `v1`
* `v2`
* `v3`

Только версия `v3` поддерживает изменение версии сериализации общих данных.

<div id="old_parts_lifetime">
  ## old\_parts\_lifetime
</div>

<SettingsInfoBlock type="Seconds" default_value="480" />

Время хранения неактивных частей (в секундах) для защиты от потери данных
при внезапных перезагрузках сервера.

Возможные значения:

* Любое положительное целое число.

После слияния нескольких частей в новую часть ClickHouse помечает исходные
части как неактивные и удаляет их только по истечении `old_parts_lifetime` секунд.
Неактивные части удаляются, если они не используются текущими запросами, то есть
если `refcount` части равен 1.

Для новых частей `fsync` не вызывается, поэтому некоторое время они существуют только
в оперативной памяти сервера (кэше ОС). Если сервер внезапно перезагрузится, новые
части могут быть потеряны или повреждены. Поэтому в целях защиты данных неактивные части не удаляются
сразу.

При запуске ClickHouse проверяет целостность частей. Если слитая часть
повреждена, ClickHouse возвращает неактивные части в список активных
и затем снова сливает их. После этого повреждённая часть переименовывается (к ней добавляется
префикс `broken_`) и перемещается в папку `detached`. Если слитая часть
не повреждена, исходные неактивные части переименовываются (к ним добавляется
префикс `ignored_`) и перемещаются в папку `detached`.

Значение `dirty_expire_centisecs` по умолчанию (параметр ядра Linux) составляет 30
секунд (это максимальное время, в течение которого записанные данные хранятся только в оперативной памяти), однако
при высокой нагрузке на дисковую систему данные могут быть записаны значительно позже. Экспериментально
для `old_parts_lifetime` было выбрано значение 480 секунд, в течение которых
гарантированно происходит запись новой части на диск.

<div id="optimize_row_order">
  ## optimize\_row\_order
</div>

<SettingsInfoBlock type="Bool" default_value="0" />

Управляет тем, следует ли оптимизировать порядок строк при вставке, чтобы улучшить
сжимаемость вновь вставленной части таблицы.

Действует только для обычных таблиц семейства MergeTree. Для
специализированных таблиц семейства MergeTree (например, CollapsingMergeTree) не
дает никакого эффекта.

Таблицы MergeTree могут (опционально) сжиматься с использованием [кодеков сжатия](/docs/ru/reference/statements/create/table#column_compression_codec).
Универсальные кодеки сжатия, такие как LZ4 и ZSTD, обеспечивают максимальную
степень сжатия, если в данных есть повторяющиеся закономерности. Длинные серии
одинаковых значений обычно сжимаются очень хорошо.

Если этот параметр включен, ClickHouse пытается хранить данные в новых
вставленных частях в таком порядке строк, который минимизирует число серий
равных значений по столбцам новой части таблицы.
Иными словами, чем меньше серий равных значений, тем длиннее каждая серия и тем
лучше она сжимается.

Найти оптимальный порядок строк вычислительно нецелесообразно (NP-трудная задача).
Поэтому ClickHouse использует эвристику, чтобы быстро найти такой порядок строк,
который все же улучшает степень сжатия по сравнению с исходным порядком.

<details markdown="1">
  <summary>Эвристика для поиска порядка строк</summary>

  В общем случае строки таблицы (или части таблицы) можно свободно перемешивать,
  поскольку SQL считает одну и ту же таблицу (часть таблицы) с разным порядком строк
  эквивалентной.

  Эта свобода перемешивания строк ограничивается, когда для таблицы определен
  первичный ключ. В ClickHouse первичный ключ `C1, C2, ..., CN` требует, чтобы
  строки таблицы были отсортированы по столбцам `C1`, `C2`, ... `Cn` ([кластеризованный индекс](https://en.wikipedia.org/wiki/Database_index#Clustered)).
  В результате строки можно перемешивать только внутри «классов эквивалентности»,
  то есть среди строк с одинаковыми значениями в столбцах первичного ключа.
  Интуитивно первичные ключи с высокой мощностью, например ключи,
  включающие столбец временной метки `DateTime64`, приводят к появлению множества
  небольших классов эквивалентности. И наоборот, таблицы с первичным ключом низкой
  мощности образуют немногочисленные и крупные классы эквивалентности. Таблица без
  первичного ключа представляет собой крайний случай: один класс эквивалентности,
  охватывающий все строки.

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

  Эвристика, применяемая для поиска наилучшего порядка строк внутри каждого класса
  эквивалентности, предложена D. Lemire и O. Kaser в статье
  [Reordering columns for smaller indexes](https://doi.org/10.1016/j.ins.2011.02.002)
  и основана на сортировке строк внутри каждого класса эквивалентности по возрастанию
  мощности столбцов, не входящих в первичный ключ.

  Она выполняется в три шага:

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

Если параметр включен, операции вставки требуют дополнительных затрат CPU на анализ и
оптимизацию порядка строк в новых данных. Ожидается, что INSERT будут выполняться на 30–50%
дольше в зависимости от характеристик данных.
Степень сжатия LZ4 или ZSTD в среднем улучшается на 20–40%.

Этот параметр лучше всего работает для таблиц без первичного ключа или с первичным ключом
низкой мощности, то есть для таблиц, имеющих лишь несколько различных значений первичного ключа.
Не ожидается, что первичные ключи высокой мощности, например включающие столбцы временных меток типа
`DateTime64`, дадут заметный выигрыш от этого параметра.

<div id="packed_skip_index_max_bytes">
  ## packed\_skip\_index\_max\_bytes
</div>

<ExperimentalBadge />

<SettingsInfoBlock type="UInt64" default_value="0" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.6"},{"label": "0"},{"label": "Новая настройка. Упаковывать любой подстрим skip-индекса, чей сериализованный размер на диске не превышает указанное число байт, в единый архив skp_idx.packed для каждой части; более крупные подстримы остаются в отдельной структуре skp_idx_<name>.idx2 \/ .mrk2. Решение принимается для каждого подстрима во время записи."}]}]} />

Порог (сериализованный размер на диске в байтах, то есть после сжатия и цепочки
хеширования подстрима), ниже которого подстрим skip-индекса упаковывается в единый архив
`skp_idx.packed` для каждой части вместо записи в отдельные файлы
`skp_idx_<name>.idx2` / `.mrk2`. Подстримы большего размера остаются в
legacy-структуре с отдельными файлами. Решение принимается независимо для
каждого подстрима во время записи, поэтому одна часть может содержать небольшие
индексы (например, `minmax`) в упакованном виде, а крупные (например, тяжёлый
`bloom_filter`) — в отдельных файлах. Установите 0, чтобы полностью отключить
упаковку (по умолчанию).

Каждый подстрим skip-индекса фактически состоит из файла данных и файла marks; оба
буферизуются в памяти до достижения порога, прежде чем принимается решение о spill.
Поэтому пиковое потребление памяти при записи масштабируется как `2 * packed_skip_index_max_bytes * (number of substreams that stay
below the threshold)`.

Полнотекстовые индексы не поддерживаются этой настройкой и никогда не упаковываются.

Упаковка снижает нагрузку на inode, когда для таблицы определено много skip-индексов (например,
с `add_minmax_index_for_numeric_columns`).

Формат хранения на диске самоописывающийся: reader обнаруживает `skp_idx.packed` и прозрачно читает из него упакованные
подстримы. Изменение этой настройки влияет только на вновь записанные части;
существующие части сохраняют ту структуру, которая была у них на момент записи.

<div id="part_minmax_index_columns">
  ## part\_minmax\_index\_columns
</div>

<SettingsInfoBlock type="MergeTreePartMinMaxIndexColumns" default_value="partition_key_only" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.5"},{"label": "partition_key_only"},{"label": "Новая настройка."}]}]} />

Определяет, какие столбцы охватывает min-max индекс для каждой части. Каждое следующее значение добавляет новую группу столбцов к уже включённым ранее.

Возможные значения:

* `partition_key_only` — отслеживаются только столбцы ключа партиции.
* `with_block_number_offset` — столбцы ключа партиции, а также сохранённые виртуальные столбцы `_block_number` и `_block_offset`. Включает отсечение на уровне частей по этим столбцам.

<div id="propagate_types_serialization_versions_to_nested_types">
  ## propagate\_types\_serialization\_versions\_to\_nested\_types
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.3"},{"label": "1"},{"label": "По умолчанию распространять версии сериализации типов данных на вложенные типы"}]}]} />

Если установлено значение true, версии сериализации, такие как `string_serialization_version`, будут распространяться на вложенные типы, такие как Array/Map/Nullable/JSON/etc. Если параметр отключён, версия сериализации будет применяться только к столбцам верхнего уровня этого типа и Tuple el

<div id="ratio_of_defaults_for_sparse_serialization">
  ## ratio\_of\_defaults\_for\_sparse\_serialization
</div>

<SettingsInfoBlock type="Float" default_value="0.9375" />

Минимальное отношение количества значений *default* к количеству *всех* значений
в столбце. При таком значении настройки столбец будет храниться с использованием разреженной
сериализации.

Если столбец разреженный (содержит в основном нули), ClickHouse может закодировать его в
разреженном формате и автоматически оптимизировать вычисления — данным не
потребуется полная распаковка во время выполнения запросов. Чтобы включить эту разреженную
сериализацию, задайте для настройки `ratio_of_defaults_for_sparse_serialization`
значение меньше `1.0`. Если значение больше или равно `1.0`,
столбцы всегда будут записываться с использованием обычной полной сериализации.

Возможные значения:

* Float между `0` и `1` для включения разреженной сериализации
* `1.0` (или больше), если вы не хотите использовать разреженную сериализацию

**Пример**

Обратите внимание, что в следующей таблице столбец `s` содержит пустую строку в 95%
строк. В `my_regular_table` мы не используем разреженную сериализацию, а в
`my_sparse_table` устанавливаем `ratio_of_defaults_for_sparse_serialization` равным
0.95:

```sql theme={null}
CREATE TABLE my_regular_table
(
`id` UInt64,
`s` String
)
ENGINE = MergeTree
ORDER BY id;

INSERT INTO my_regular_table
SELECT
number AS id,
number % 20 = 0 ? toString(number): '' AS s
FROM
numbers(10000000);

CREATE TABLE my_sparse_table
(
`id` UInt64,
`s` String
)
ENGINE = MergeTree
ORDER BY id
SETTINGS ratio_of_defaults_for_sparse_serialization = 0.95;

INSERT INTO my_sparse_table
SELECT
number,
number % 20 = 0 ? toString(number): ''
FROM
numbers(10000000);
```

Обратите внимание, что столбец `s` в `my_sparse_table` требует меньше места на диске:

```sql theme={null}
SELECT table, name, data_compressed_bytes, data_uncompressed_bytes FROM system.columns
WHERE table LIKE 'my_%_table';
```

```response theme={null}
┌─table────────────┬─name─┬─data_compressed_bytes─┬─data_uncompressed_bytes─┐
│ my_regular_table │ id   │              37790741 │                75488328 │
│ my_regular_table │ s    │               2451377 │                12683106 │
│ my_sparse_table  │ id   │              37790741 │                75488328 │
│ my_sparse_table  │ s    │               2283454 │                 9855751 │
└──────────────────┴──────┴───────────────────────┴─────────────────────────┘
```

Вы можете проверить, использует ли столбец разреженное кодирование, посмотрев
на столбец `serialization_kind` таблицы `system.parts_columns`:

```sql theme={null}
SELECT column, serialization_kind FROM system.parts_columns
WHERE table LIKE 'my_sparse_table';
```

Вы можете увидеть, какие части `s` сохранены с использованием разреженной сериализации:

```response theme={null}
┌─column─┬─serialization_kind─┐
│ id     │ Default            │
│ s      │ Default            │
│ id     │ Default            │
│ s      │ Default            │
│ id     │ Default            │
│ s      │ Sparse             │
│ id     │ Default            │
│ s      │ Sparse             │
│ id     │ Default            │
│ s      │ Sparse             │
│ id     │ Default            │
│ s      │ Sparse             │
│ id     │ Default            │
│ s      │ Sparse             │
│ id     │ Default            │
│ s      │ Sparse             │
│ id     │ Default            │
│ s      │ Sparse             │
│ id     │ Default            │
│ s      │ Sparse             │
│ id     │ Default            │
│ s      │ Sparse             │
└────────┴────────────────────┘
```

<div id="reduce_blocking_parts_sleep_ms">
  ## reduce\_blocking\_parts\_sleep\_ms
</div>

<SettingsInfoBlock type="UInt64" default_value="5000" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.1"},{"label": "5000"},{"label": "Синхронизация с Cloud"}]}]} />

Доступно только в ClickHouse Cloud. Минимальное время ожидания перед
повторной попыткой сократить количество блокирующих частей, если в
предыдущий раз не было отброшено/заменено ни одного диапазона. Более низкое
значение этого параметра будет часто запускать задачи в background\_schedule\_pool,
что приводит к большому количеству запросов к ZooKeeper в крупных кластерах

<div id="replace_long_file_name_to_hash">
  ## replace\_long\_file\_name\_to\_hash
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

Если имя файла для столбца слишком длинное (более 'max\_file\_name\_length'
байт), заменять его на SipHash128

<div id="replicated_can_become_leader">
  ## replicated\_can\_become\_leader
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

Если `true`, реплики реплицируемых таблиц на этом узле будут пытаться
стать лидером.

Возможные значения:

* `true`
* `false`

<div id="search_orphaned_parts_disks">
  ## search\_orphaned\_parts\_disks
</div>

<SettingsInfoBlock type="SearchOrphanedPartsDisks" default_value="any" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.8"},{"label": "any"},{"label": "новая настройка"}]}]} />

ClickHouse сканирует все диски на наличие осиротевших частей при любом ATTACH или CREATE таблицы,
чтобы не допустить пропуска частей данных на неопределённых дисках (не входящих в политику хранения).
Осиротевшие части появляются в результате потенциально небезопасной реконфигурации хранилища, например если диск был исключён из политики хранения.
Эта настройка ограничивает область поиска по характеристикам дисков.

Возможные значения:

* any - область поиска не ограничена.
* local - область поиска ограничена локальными дисками.
* none - пустая область, поиск не выполняется

<div id="serialization_info_version">
  ## serialization\_info\_version
</div>

<SettingsInfoBlock type="MergeTreeSerializationInfoVersion" default_value="with_types" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.11"},{"label": "with_types"},{"label": "Переход на новый формат с поддержкой пользовательской сериализации строк"}]}, {"id": "row-2","items": [{"label": "25.10"},{"label": "basic"},{"label": "новая настройка"}]}]} />

Версия информации о сериализации, используемая при записи `serialization.json`.
Эта настройка необходима для обеспечения совместимости во время обновления кластера.

Возможные значения:

* `basic` - Базовый формат.
* `with_types` - Формат с дополнительным полем `types_serialization_versions`, позволяющий задавать версии сериализации отдельно для каждого типа.
  Благодаря этому начинают действовать такие настройки, как `string_serialization_version`.

Во время поэтапных обновлений установите значение `basic`, чтобы новые серверы создавали
части данных, совместимые со старыми серверами. После завершения обновления
переключитесь на `WITH_TYPES`, чтобы включить версии сериализации для каждого типа.

<div id="share_nested_offsets">
  ## share\_nested\_offsets
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.4"},{"label": "1"},{"label": "Если установлено значение false, столбцы типа Array с именами, содержащими точки и имеющими общий префикс, обрабатываются как независимые столбцы вместо использования общих файлов offsets в рамках устаревшей семантики Nested"}]}]} />

Когда включено (по умолчанию), столбцы типа Array с именами, содержащими точки и имеющими общий префикс (например, n.a и n.b),
рассматриваются как часть структуры Nested: они используют один общий файл offsets на диске (например, n.size0),
и во время INSERT проверяется, что размеры их массивов совпадают.
Когда отключено, каждый столбец типа Array получает собственный независимый файл offsets, имена с точками не имеют специальной
семантики, и скалярный столбец может сосуществовать со столбцами типа Array с точками и тем же префиксом
(например, n UInt32 вместе с n.a Array(String)). Этот параметр нельзя изменить после создания таблицы.

<div id="simultaneous_parts_removal_limit">
  ## simultaneous\_parts\_removal\_limit
</div>

<SettingsInfoBlock type="UInt64" default_value="0" />

Если устаревших частей много, поток очистки попытается удалить до
`simultaneous_parts_removal_limit` частей за одну итерацию.
Значение `simultaneous_parts_removal_limit`, равное `0`, означает, что ограничений нет.

<div id="storage_policy">
  ## storage\_policy
</div>

<SettingsInfoBlock type="String" default_value="default" />

Имя политики хранения на дисках

<div id="string_serialization_version">
  ## string\_serialization\_version
</div>

<SettingsInfoBlock type="MergeTreeStringSerializationVersion" default_value="with_size_stream" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.11"},{"label": "with_size_stream"},{"label": "Переход на новый формат с отдельным потоком размеров"}]}, {"id": "row-2","items": [{"label": "25.10"},{"label": "single_stream"},{"label": "Новая настройка"}]}]} />

Управляет форматом сериализации `String`-столбцов верхнего уровня.

Эта настройка действует только в том случае, если `serialization_info_version` имеет значение "with\_types".
Если задано значение `with_size_stream`, `String`-столбцы верхнего уровня сериализуются с отдельным
подстолбцом `.size`, в котором хранятся длины строк, а не inline. Это позволяет использовать реальные `.size`
подстолбцы и может повысить эффективность сжатия.

Вложенные типы `String` (например, внутри `Nullable`, `LowCardinality`, `Array` или `Map`)
не затрагиваются, за исключением случаев, когда они находятся в `Tuple`.

Возможные значения:

* `single_stream` — Использовать стандартный формат сериализации со встроенными размерами.
* `with_size_stream` — Использовать отдельный поток размеров для `String`-столбцов верхнего уровня.

<div id="temporary_directories_lifetime">
  ## temporary\_directories\_lifetime
</div>

<SettingsInfoBlock type="Seconds" default_value="86400" />

Сколько секунд хранить каталоги tmp\_. Не следует уменьшать это значение,
поскольку слияния и мутации могут работать некорректно при низком значении этой
настройки.

<div id="try_fetch_recompressed_part_timeout">
  ## try\_fetch\_recompressed\_part\_timeout
</div>

<SettingsInfoBlock type="Seconds" default_value="7200" />

Тайм-аут (в секундах) перед началом слияния с повторным сжатием. В течение этого
времени ClickHouse пытается получить part с повторным сжатием с реплики, которой назначено
это слияние с повторным сжатием.

Повторное сжатие в большинстве случаев выполняется медленно, поэтому до истечения этого
тайм-аута слияние с повторным сжатием не запускается, а ClickHouse пытается получить
part с повторным сжатием с реплики, которой назначено это слияние с повторным сжатием.

Возможные значения:

* Любое положительное целое число.

<div id="ttl_only_drop_parts">
  ## ttl\_only\_drop\_parts
</div>

<SettingsInfoBlock type="Bool" default_value="0" />

Управляет тем, будут ли в таблицах семейства MergeTree полностью удаляться части данных, если все
строки в такой части истекли в соответствии с настройками `TTL`.

Когда `ttl_only_drop_parts` выключен (по умолчанию), удаляются только строки,
срок действия которых истек в соответствии с настройками `TTL`.

Когда `ttl_only_drop_parts` включен, удаляется вся часть, если все
строки в ней истекли в соответствии с настройками `TTL`.

<div id="wait_for_unique_parts_send_before_shutdown_ms">
  ## wait\_for\_unique\_parts\_send\_before\_shutdown\_ms
</div>

<SettingsInfoBlock type="Milliseconds" default_value="0" />

Перед завершением работы таблица будет в течение заданного времени ждать, пока уникальные части
(существующие только на текущей реплике) не будут получены другими репликами (0 означает,
что параметр отключён).

<div id="zookeeper_session_expiration_check_period">
  ## zookeeper\_session\_expiration\_check\_period
</div>

<SettingsInfoBlock type="Seconds" default_value="60" />

Период проверки истечения сеанса ZooKeeper в секундах.

Возможные значения:

* Любое положительное целое число.
