Descrição
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 com os nomes de todos os discos que fazem parte desta política de armazenamento.volume_type(Enum8(‘JBOD’ = 0, ‘SINGLE_DISK’ = 1, ‘UNKNOWN’ = 2)) — O tipo do volume — JBOD ou disco único.max_data_part_size(UInt64) — o tamanho máximo de uma parte de dados que pode ser armazenada em qualquer um dos discos 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) — Você não deve usar essa configuração. Desabilita a mesclagem de partes de dados neste volume (isso é prejudicial e leva à degradação do desempenho).perform_ttl_move_on_insert(UInt8) — Desabilita TTL move no INSERT de parte de dados. Por padrão (se habilitado), se uma parte de dados já inserida tiver expirado pela regra de TTL move, ela vai imediatamente para um volume/disco definido na regra de movimentação.load_balancing(Enum8(‘ROUND_ROBIN’ = 0, ‘LEAST_USED’ = 1)) — Política de balanceamento de discos:round_robinouleast_used.
Seleção de volume no INSERT
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.
- Regra de TTL move — se uma cláusula
TTL <expr> TO VOLUME 'X'(ouTO DISK 'X') já estiver no passado para as linhas que estão sendo inseridas, eperform_ttl_move_on_insert = 1(padrão) no volume de destino do TTL (paraTO DISK 'X', o volume que contém o discoX), a parte é gravada diretamente nesse destino. Se a reserva ali falhar, o insert recorre às etapas 2–4; um aviso é registrado, mas oINSERTnão falha apenas por esse motivo. max_data_part_size— um volume rejeita partes maiores que seumax_data_part_size. Isso é verificado por volume; não impede uma reserva da etapa 1TTL ... TO DISK 'X', que tem o disco como destino direto.volume_priority— entre os volumes restantes, é escolhido aquele com o menor valor devolume_priority. Volumes sem um<volume_priority>explícito são ordenados pela sua posição na configuração.load_balancing— depois que um volume é escolhido, o disco dentro desse volume é selecionado de acordo com sua política deload_balancing(round_robinouleast_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.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.