> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-detect-table-modification.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Когда применяются правила TTL и можно ли этим управлять?

> Правила TTL в ClickHouse применяются не сразу, и вы можете управлять временем их выполнения с помощью настройки `merge_with_ttl_timeout`. Узнайте, как принудительно применить TTL и управлять фоновыми потоками, отвечающими за его выполнение.

<div id="ttl-rules-and-control">
  ## Правила TTL и управление
</div>

TTL будет применён ***не сразу***. Что это значит? Настройка таблицы `MergeTree` [`merge_with_ttl_timeout`](/ru/reference/engines/table-engines/mergetree-family/mergetree#merge_with_ttl_timeout) задаёт минимальную задержку в секундах перед повторным слиянием с delete TTL. Значение по умолчанию — 14400 секунд (4 часа). Но это лишь минимальная задержка: фактический запуск слияния для delete TTL может произойти позже.

Вы можете просмотреть все текущие настройки TTL (например, `merge_with_ttl_timeout`) с помощью этого запроса:

```sql theme={null}
SELECT *
FROM system.merge_tree_settings
WHERE name like '%ttl%'
```

Ответ выглядит так:

```response theme={null}
┌─name───────────────────────────────────────────────────────────┬─value───┬─changed─┬─description────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬─min──┬─max──┬─readonly─┬─type───┐
│ max_replicated_merges_with_ttl_in_queue                        │ 1       │       0 │ Сколько задач слияния частей с TTL разрешено выполнять одновременно в очереди ReplicatedMergeTree.                                                                                        │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │        0 │ UInt64 │
│ max_number_of_merges_with_ttl_in_pool                          │ 2       │       0 │ Если в пуле накопилось больше указанного числа операций слияния с записями TTL, новые операции слияния с TTL не назначаются. Это позволяет освободить потоки для обычных слияний и избежать ошибки "Too many parts" │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │        0 │ UInt64 │
│ merge_tree_clear_old_broken_detached_parts_ttl_timeout_seconds │ 2592000 │       1 │ Удалять старые повреждённые отсоединённые части в фоновом режиме, если они не трогались в течение периода, заданного этим параметром.                                                     │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │        0 │ UInt64 │
│ merge_with_ttl_timeout                                         │ 14400   │       0 │ Минимальный интервал в секундах, по истечении которого слияние с удалением по TTL может быть повторено.                                                                                    │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │        0 │ Int64  │
│ merge_with_recompression_ttl_timeout                           │ 14400   │       0 │ Минимальный интервал в секундах, по истечении которого слияние с повторным сжатием по TTL может быть повторено.                                                                            │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │        0 │ Int64  │
│ ttl_only_drop_parts                                            │ 0       │       0 │ Удалять устаревшие части целиком, не выполняя их частичную очистку.                                                                                                                       │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │        0 │ Bool   │
│ materialize_ttl_recalculate_only                               │ 0       │       0 │ Только пересчитывать информацию ttl при выполнении MATERIALIZE TTL                                                                                                                        │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │        0 │ Bool   │
└────────────────────────────────────────────────────────────────┴─────────┴─────────┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴──────┴──────┴──────────┴────────┘
```

Вы можете использовать `SHOW CREATE TABLE`, чтобы проверить, содержит ли ваша таблица правила TTL, а также изменяли ли какие-либо `SETTINGS` таблицы значения указанных выше настроек:

```sql theme={null}
SHOW CREATE TABLE <TableName>
```

<div id="force-a-ttl-rule-to-be-applied">
  ## Принудительно применить правило TTL
</div>

Это не самое изящное решение, но можно явно вызвать `MATERIALIZE TTL`, чтобы принудительно материализовать все правила TTL таблицы:

```sql theme={null}
ALTER TABLE my_table
    MATERIALIZE TTL
```

<div id="background-threads-affecting-ttl">
  ## Фоновые потоки, влияющие на TTL
</div>

Возможно, ваши правила TTL не применяются из-за недостаточного числа рабочих потоков во фоновом пуле. Например, при интенсивной вставке данных весь фоновый пул может быть занят обычными слияниями. Однако размер фонового пула можно увеличить.

Проверить текущий размер фонового пула можно с помощью этого запроса:

```sql theme={null}
SELECT *
FROM system.settings
WHERE name = 'background_pool_size';
```

Ответ будет выглядеть так:

```response theme={null}
┌─name─────────────────┬─value─┬─changed─┬─description─────────────────────┬─min──┬─max──┬─readonly─┬─type───┬─default─┬─alias_for─┐
│ background_pool_size │ 16    │       0 │ Устаревшая настройка, не выполняет никаких действий. │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │        0 │ UInt64 │ 16      │           │
└──────────────────────┴───────┴─────────┴─────────────────────────────────┴──────┴──────┴──────────┴────────┴─────────┴───────────┘
```

О том, как изменить [параметр `background_pool_size`](/ru/reference/settings/server-settings/settings#background_pool_size), см. в документации; он задается следующим образом:

```xml theme={null}
<background_pool_size>16</background_pool_size>
```

Текущую активность фонового пула можно проверить с помощью следующего запроса:

```sql theme={null}
SELECT *
FROM system.metrics
WHERE metric like 'Background%'
```
