Описание
Столбцы
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)
проверка продолжается со следующим правилом.
- Правило TTL move — если момент, заданный выражением
TTL <expr> TO VOLUME 'X'(илиTO DISK 'X'), для вставляемых строк уже наступил, иperform_ttl_move_on_insert = 1(по умолчанию) на целевом томе TTL (дляTO DISK 'X'— на томе, содержащем дискX), то часть записывается сразу в это место назначения. Если зарезервировать место там не удается, вставка переходит к шагам 2–4; предупреждение записывается в журнал, ноINSERTне завершается ошибкой только по этой причине. max_data_part_size— том отклоняет части, размер которых превышает егоmax_data_part_size. Эта проверка выполняется отдельно для каждого тома; она не влияет на резервирование на шаге 1 дляTTL ... TO DISK 'X', поскольку в этом случае обращение идет напрямую к диску.volume_priority— среди оставшихся томов выбирается том с наименьшим значениемvolume_priority. Тома без явно заданного<volume_priority>упорядочиваются по своему положению в конфигурации.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.