system.storage_policies
Описание
Содержит информацию о политиках хранения и томах, которые определены в конфигурации сервера.
Столбцы
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-перемещение при INSERT части. По умолчанию (если включено), если вставляемая часть уже соответствует правилу TTL-перемещения, она немедленно помещается на том/диск, указанный в правиле перемещения.load_balancing(Enum8('ROUND_ROBIN' = 0, 'LEAST_USED' = 1)) — Политика балансировки дисков:round_robinилиleast_used.
Выбор тома при INSERT
Когда INSERT создает новую часть, ClickHouse выбирает целевой диск,
последовательно применяя приведенные ниже правила. Срабатывает первое правило, которое подходит и может
зарезервировать место для части; в противном случае (правило не применяется, нет свободного
места или превышен max_data_part_size) проверка продолжается со следующим
правилом.
- Правило TTL-перемещения — если для вставляемых строк момент, заданный условием
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-перемещения для уже
истекшего TTL, установите perform_ttl_move_on_insert = 0 на
целевом томе TTL (для TO DISK 'X' — на томе, содержащем
диск X). Тогда часть сначала будет записана на том с приоритетом N, а затем
перемещена в целевой том TTL фоновой задачей перемещения (это можно наблюдать через
system.moves). См.
настройку perform_ttl_move_on_insert для движка MergeTree.