ClickHouse — 열 지향 분석 DB 를 속까지 · 파트와 병합 · 퀴즈
퀴즈: 파트·병합·TOO_MANY_PARTS
6문항. 정답과 해설은 풀어 본 뒤에 보여 드립니다.
system.parts 에 `all_4_9_2` 라는 활성 파트가 있다. 이 이름에서 읽을 수 있는 것은?
- 4번째 파티션의 9번째 파트이며 2번 복제됐다
- 블록 4–9 를 덮고, 병합을 거쳐 수준 2 가 된 파트다
- 4행부터 9행까지 들어 있고 열이 2개다
- INSERT 4번과 병합 9번을 거쳐 2번째로 만들어졌다
`SYSTEM STOP MERGES t` 를 한 뒤 `OPTIMIZE TABLE t FINAL` 을 쳤다. 26.8 실습 파드에서 일어난 일은?
- Cancelled merging parts(ABORTED)로 거절됐다
- OPTIMIZE 는 수동 명령이라 멈춤과 무관하게 합쳐졌다
- 병합이 예약만 되고 START MERGES 때 자동으로 실행됐다
- 파트 수는 그대로인데 수준만 1 오른 이름이 됐다
100만 행을 INSERT ... SELECT 한 번으로 넣었는데 part_log 에 NewPart 가 4줄 생겼다. 원인은?
- 표에 파티션 키가 네 개라서
- max_threads 가 4 라서 스레드마다 파트를 하나씩 썼다
- 블록 크기 설정(min_insert_block_size_rows)이 작아 블록 넷으로 잘렸다
- INSERT 가 실패해 세 번 다시 시도했다
parts_to_throw_insert 를 5 로 낮추고 병합을 멈춘 표에 한 행씩 넣었다. 여섯 번째 INSERT 가 TOO_MANY_PARTS 로 거절됐을 때 가장 알맞은 복구는?
- parts_to_throw_insert 를 3000 으로 올려 다시 넣는다
- 거절된 INSERT 를 성공할 때까지 짧은 간격으로 계속 다시 보낸다
- 표를 TRUNCATE 하고 여섯 행을 다시 한 행씩 넣는다
- 병합을 켜고 OPTIMIZE 로 파트를 줄인 뒤 그 행을 다시 넣는다
26.8 기본값(async_insert = 1, wait_for_async_insert = 1)에서 셸 반복문으로 INSERT ... VALUES 를 하나씩 5번 보냈더니 파트가 5개 생겼다. 왜 하나로 모이지 않았나?
- VALUES 형식에는 비동기 INSERT 가 적용되지 않는다
- 각 INSERT 가 버퍼가 비워질 때까지 기다려, 버퍼에 늘 하나씩만 있었다
- 비동기 INSERT 는 표마다 파트를 최소 5개 만든다
- query_log 가 켜져 있으면 비동기 INSERT 가 꺼진다
같은 이름으로 표를 지웠다가 다시 만들어 실습을 반복했더니 part_log 의 NewPart 수가 두 배로 보였다. 지금 표의 기록만 세는 방법은?
- event_date 를 오늘로 거른다
- TRUNCATE TABLE system.part_log 로 기록을 비운다
- table_uuid 를 system.tables 의 지금 uuid 로 거른다
- part_name 이 _0 으로 끝나는 줄만 센다