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) — 데이터 파트 INSERT 시 TTL 이동을 비활성화합니다. 기본적으로(활성화된 경우) 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') 절이 삽입되는 행에 대해 이미 지난 시점에 해당하고, 또한 TTL 대상 볼륨(TO DISK 'X'의 경우 디스크X를 포함하는 볼륨)에서perform_ttl_move_on_insert = 1(기본값)이면, 해당 데이터 파트는 그 대상에 직접 기록됩니다. 해당 위치에서 예약에 실패하면 삽입은 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가 0이 아니면, 위 우선순위는
적용되지 않습니다. INSERT는 volume_priority가 가장 낮은 볼륨만
시도하며, 그 볼륨의 어떤 디스크도 임계값을 충족하지 못하면
NOT_ENOUGH_SPACE 예외를 발생시킵니다. system 데이터베이스에 대한 삽입은 예외입니다.
perform_ttl_move_on_insert는 소스 볼륨이 아니라 TTL 대상 볼륨에서
읽습니다. TO DISK 'X' 규칙의 경우 이 플래그는 디스크 X를 포함하는
볼륨에서 읽습니다. 정책 내 다른 볼륨에 설정해도 삽입 경로에는
영향이 없습니다.
"이미 만료된" TTL 이동 규칙이 적용되더라도 삽입이
volume_priority를 따르도록 강제하려면 TTL 대상 볼륨에서
perform_ttl_move_on_insert = 0으로 설정하십시오 (TO DISK 'X'의 경우
디스크 X를 포함하는 볼륨에 설정). 그러면 해당 데이터 파트는 먼저 priority-N
볼륨에 기록된 뒤, 백그라운드 TTL 이동을 통해 TTL 대상으로
이동됩니다(system.moves에서 확인 가능). 자세한 내용은
perform_ttl_move_on_insert setting on the MergeTree engine을 참조하십시오.