본문으로 바로가기
본문으로 바로가기

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를 초과한 경우) 다음 규칙을 계속 평가합니다.

  1. TTL 이동 규칙TTL <expr> TO VOLUME 'X'(또는 TO DISK 'X') 절이 삽입되는 행에 대해 이미 지난 시점에 해당하고, 또한 TTL 대상 볼륨(TO DISK 'X'의 경우 디스크 X를 포함하는 볼륨)에서 perform_ttl_move_on_insert = 1(기본값)이면, 해당 데이터 파트는 그 대상에 직접 기록됩니다. 해당 위치에서 예약에 실패하면 삽입은 2–4단계로 넘어가며, 경고는 기록되지만 이 사유만으로 INSERT가 실패하지는 않습니다.
  2. max_data_part_size — 볼륨은 자신의 max_data_part_size보다 큰 데이터 파트를 거부합니다. 이 검사는 볼륨별로 수행되며, 디스크를 직접 대상으로 하는 1단계의 TTL ... TO DISK 'X' 예약에는 적용되지 않습니다.
  3. volume_priority — 남은 볼륨 중 volume_priority 값이 가장 낮은 볼륨이 선택됩니다. 명시적인 <volume_priority>가 없는 볼륨은 구성에서의 위치 순서대로 정해집니다.
  4. load_balancing — 볼륨이 선택되면, 해당 볼륨 내 디스크는 그 볼륨의 load_balancing 정책에 따라 선택됩니다 (round_robin 또는 least_used).
재정의

min_free_disk_bytes_to_perform_insert 또는 min_free_disk_ratio_to_perform_insert가 0이 아니면, 위 우선순위는 적용되지 않습니다. INSERTvolume_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을 참조하십시오.