ClickHouse — 열 지향 분석 DB 를 속까지 · 파티션 · 测验
퀴즈: 파티션 가지치기와 파티션 조작
6道题. 完成作答后会显示正确答案和解析。
PARTITION BY toYYYYMM(ts) 표에서 8월 범위로 걸렀더니 EXPLAIN 의 Min-Max 단계에 `Parts: 1/3` 이 나왔다. 무엇을 뜻하나?
- 파트마다 적힌 ts 최솟값·최댓값으로 8월과 겹치지 않는 두 파트를 열지 않았다
- 파티션 세 개 중 하나가 손상돼 읽지 못했다
- 정렬 키 인덱스가 그래뉼 3개 중 1개를 골랐다
- OPTIMIZE FINAL 이 파트 셋을 하나로 합쳤다
같은 정렬 키 (region, ts) 로 파티션 있는 표와 없는 표를 만들어 8월 쿼리를 돌렸더니 505,454행 대 581,632행을 읽었다. 여기서 얻을 결론은?
- 파티션이 없으면 8월 쿼리는 전체 150만 행을 읽는다
- 파티션 없는 표에서도 정렬 키가 대부분을 건너뛰어, 파티션의 이득은 작다
- 파티션 있는 표가 늘 더 적게 읽으므로 날짜 파티션을 더 잘게 나눠야 한다
- 파티션 없는 표는 PREWHERE 를 쓰지 못해 더 읽는다
7월을 `ALTER TABLE ... DELETE WHERE toYYYYMM(ts) = 202607` 로 지웠더니 part_log 에 MutatePart 가 3번 찍혔다(파티션 셋). 왜 7월이 없는 파트까지인가?
- DELETE 가 실패해 세 번 다시 시도했다
- 파티션마다 복제본이 있어서 각각 지웠다
- 뮤테이션은 표의 파트 전체를 대상으로 새 버전을 만든다
- mutations_sync = 1 이 모든 파트를 강제로 다시 쓰게 한다
`DETACH PARTITION 202609` 뒤 `ATTACH PARTITION 202609` 를 했더니 파트 이름이 202609_3_4_1 에서 202609_5_5_0 이 됐다. 옳은 설명은?
- 다시 붙은 파트가 새 블록 번호를 받았다
- ATTACH 가 파트를 처음부터 다시 INSERT 했다
- DETACH 가 파트를 압축 해제해 수준이 0 이 됐다
- detached 디렉터리에 있던 동안 병합이 한 번 더 일어났다
`ALTER TABLE b ATTACH PARTITION 202607 FROM a` 를 실행한 뒤 두 표의 상태는?
- a 의 7월이 b 로 옮겨지고 a 에서는 사라진다
- b 에 7월이 INSERT 쿼리로 다시 쓰여 query_log 에 Insert 가 남는다
- a 는 그대로, b 는 7월이 비어 있고 detached/ 에만 들어간다
- a 는 그대로 두고 b 에 7월 파트가 복사된다
PARTITION BY (toDate(ts), region) 표에 석 달치를 한 번에 넣었더니 오류 252 로 한 행도 들어가지 않았다. 가장 나은 대응은?
- max_partitions_per_insert_block 을 1000 으로 올린다
- 하루치씩 나눠 92번 INSERT 한다
- 파티션 키를 월 같은 굵은 단위로 바꾸고 날짜·지역은 정렬 키로 거른다
- region 을 LowCardinality 가 아닌 String 으로 바꾼다