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

Описание

Содержит сведения о политиках хранения и томах, определённых в конфигурации сервера.

Столбцы

  • policy_name (String) — Имя политики хранения.
  • volume_name (String) — Имя тома.
  • volume_priority (UInt64) — Приоритет тома.
  • disks (Array(String)) — Список имен всех дисков, входящих в эту политику хранения.
  • volume_type (Enum8(‘JBOD’ = 0, ‘SINGLE_DISK’ = 1, ‘UNKNOWN’ = 2)) — Тип тома — JBOD или одиночный диск.
  • max_data_part_size (UInt64) — Максимальный размер части данных, которая может храниться на любом из дисков тома.
  • move_factor (Float32) — Когда объем доступного пространства становится меньше этого коэффициента, данные автоматически начинают перемещаться на следующий том, если он есть (по умолчанию 0.1).
  • prefer_not_to_merge (UInt8) — Не следует использовать эту настройку. Отключает слияние частей данных на этом томе (это вредно и приводит к снижению производительности).
  • perform_ttl_move_on_insert (UInt8) — Отключает TTL move при INSERT части данных. По умолчанию (если включено), если вставляется часть данных, для которой уже сработало правило TTL move, она сразу помещается на том или диск, указанный в правиле перемещения.
  • load_balancing (Enum8(‘ROUND_ROBIN’ = 0, ‘LEAST_USED’ = 1)) — Политика балансировки дисков: round_robin или least_used.

Выбор тома при INSERT

Когда INSERT создает новую часть данных, ClickHouse выбирает целевой диск, последовательно применяя приведенные ниже правила. Используется первое правило, которое подходит и позволяет зарезервировать место для части; в противном случае (если правило не применимо, нет свободного места или превышен max_data_part_size) проверка продолжается со следующим правилом.
  1. Правило TTL move — если момент, заданный выражением TTL <expr> TO VOLUME 'X' (или TO DISK 'X'), для вставляемых строк уже наступил, и perform_ttl_move_on_insert = 1 (по умолчанию) на целевом томе TTL (для TO DISK 'X' — на томе, содержащем диск X), то часть записывается сразу в это место назначения. Если зарезервировать место там не удается, вставка переходит к шагам 2–4; предупреждение записывается в журнал, но INSERT не завершается ошибкой только по этой причине.
  2. max_data_part_size — том отклоняет части, размер которых превышает его max_data_part_size. Эта проверка выполняется отдельно для каждого тома; она не влияет на резервирование на шаге 1 для TTL ... TO DISK 'X', поскольку в этом случае обращение идет напрямую к диску.
  3. volume_priority — среди оставшихся томов выбирается том с наименьшим значением volume_priority. Тома без явно заданного <volume_priority> упорядочиваются по своему положению в конфигурации.
  4. load_balancing — после выбора тома диск внутри этого тома выбирается в соответствии с его политикой load_balancing (round_robin или least_used).
ПереопределениеЕсли min_free_disk_bytes_to_perform_insert или min_free_disk_ratio_to_perform_insert не равен нулю, описанный выше порядок приоритета обходится. INSERT пытается использовать только том с наименьшим volume_priority и генерирует NOT_ENOUGH_SPACE, если ни один диск в этом томе не удовлетворяет пороговому значению. Вставки в базу данных system — исключение.
perform_ttl_move_on_insert считывается из целевого тома TTL, а не из исходного тома. Для правила TO DISK 'X' флаг считывается из тома, содержащего диск X. Установка этого параметра на любом другом томе в рамках политики не влияет на путь вставки.
Чтобы вставки учитывали volume_priority, даже если применяется правило TTL move с уже «истекшим» сроком, установите perform_ttl_move_on_insert = 0 на целевом томе TTL (для TO DISK 'X' — на томе, содержащем диск X). В этом случае часть сначала записывается на том с приоритетом N, а затем перемещается в целевой том TTL фоновой задачей перемещения (это можно увидеть в system.moves). См. настройку perform_ttl_move_on_insert для движка MergeTree.
Последнее изменение 10 июня 2026 г.