Skip to main content

Descrição

Contém informações sobre políticas de armazenamento e volumes definidos na configuração do servidor.

Colunas

  • policy_name (String) — O nome da política de armazenamento.
  • volume_name (String) — O nome do volume.
  • volume_priority (UInt64) — A prioridade do volume.
  • disks (Array(String)) — A lista dos nomes de todos os disks que fazem parte desta política de armazenamento.
  • volume_type (Enum8(‘JBOD’ = 0, ‘SINGLE_DISK’ = 1, ‘UNKNOWN’ = 2)) — O tipo do volume: JBOD ou um único disk.
  • max_data_part_size (UInt64) — O tamanho máximo de uma parte que pode ser armazenada em qualquer um dos disks do volume.
  • move_factor (Float32) — Quando a quantidade de espaço disponível fica abaixo desse fator, os dados começam a ser movidos automaticamente para o próximo volume, se houver (por padrão, 0,1).
  • prefer_not_to_merge (UInt8) — Não use esta configuração. Ela desativa a mesclagem de partes de dados neste volume, o que é prejudicial e degrada o desempenho.
  • perform_ttl_move_on_insert (UInt8) — Desativa a movimentação por TTL ao inserir uma parte de dados. Por padrão, se estiver ativada, uma parte de dados inserida que já tenha expirado conforme a regra de movimentação por TTL será imediatamente movida para o volume/disk declarado nessa regra.
  • load_balancing (Enum8(‘ROUND_ROBIN’ = 0, ‘LEAST_USED’ = 1)) — Política de balanceamento de disks: round_robin ou least_used.

Seleção de volume no INSERT

Quando o INSERT cria uma nova parte de dados, o ClickHouse escolhe um disco de destino tentando as regras abaixo na ordem indicada. A primeira regra que corresponder e conseguir reservar espaço para a parte prevalece; caso contrário (a regra não se aplica, não há espaço livre ou max_data_part_size foi excedido), a avaliação continua com a próxima regra.
  1. Regra de TTL move — se uma cláusula TTL <expr> TO VOLUME 'X' (ou TO DISK 'X') já estiver no passado para as linhas que estão sendo inseridas, e perform_ttl_move_on_insert = 1 (padrão) no volume de destino do TTL (para TO DISK 'X', o volume que contém o disco X), a parte é gravada diretamente nesse destino. Se a reserva ali falhar, o insert recorre às etapas 2–4; um aviso é registrado, mas o INSERT não falha apenas por esse motivo.
  2. max_data_part_size — um volume rejeita partes maiores que seu max_data_part_size. Isso é verificado por volume; não impede uma reserva da etapa 1 TTL ... TO DISK 'X', que tem o disco como destino direto.
  3. volume_priority — entre os volumes restantes, é escolhido aquele com o menor valor de volume_priority. Volumes sem um <volume_priority> explícito são ordenados pela sua posição na configuração.
  4. load_balancing — depois que um volume é escolhido, o disco dentro desse volume é selecionado de acordo com sua política de load_balancing (round_robin ou least_used).
SubstituiçãoSe min_free_disk_bytes_to_perform_insert ou min_free_disk_ratio_to_perform_insert for diferente de zero, a precedência acima é ignorada. O INSERT tenta apenas o volume com o menor volume_priority e lança NOT_ENOUGH_SPACE se nenhum disco nesse volume atender ao limite. Inserts no banco de dados system estão isentos.
perform_ttl_move_on_insert é lido no volume de destino do TTL, não no volume de origem. Para uma regra TO DISK 'X', a flag é lida do volume que contém o disco X. Defini-la em qualquer outro volume da política não tem efeito no caminho do insert.
Para forçar inserts a respeitar volume_priority mesmo quando se aplica uma regra de TTL move “já expirada”, defina perform_ttl_move_on_insert = 0 no volume de destino do TTL (para TO DISK 'X', no volume que contém o disco X). A parte é então gravada primeiro no volume de prioridade N e movida para o destino TTL por uma tarefa de movimentação em segundo plano (observável via system.moves). Veja a configuração perform_ttl_move_on_insert no motor MergeTree.
Última modificação em 14 de agosto de 2026