Lightweight DELETE — 전체 컬럼을 다시 쓰지 않고 마스크 하나만 바꾼다
ClickHouse Lightweight DELETE 및 RBAC 공식 문서·기술 블로그 종합 (웹 리서치, 2026) — ClickHouse 공식 문서(guides/developer/mutations, best-practices/avoid-mutations, operations/access-rights) + ClickHouse 공식 블로그 ClickHouse 공식문서 Updating and deleting ClickHouse data, Avoid mutations
이 모듈을 다 읽으면
- 일반 mutation(ALTER TABLE UPDATE/DELETE)이 왜 전체 컬럼을 다시 쓰는 무거운 작업인지 설명할 수 있다
- Lightweight DELETE가 _row_exists 마스크 컬럼만 바꿔 이 비용을 어떻게 회피하는지 설명할 수 있다
clickhouse-learn-01·30에서 다룬 '병합은 Part 단위로 이뤄지고 mutation은 비동기·비용이 크다'는 사실을 전제로, 실제로 그 비용이 어디서 나오는지, 그리고 삭제라는 특수한 경우에 한해 그 비용을 회피하는 Lightweight DELETE의 메커니즘을 정리한다.
일반 mutation — 행 하나만 바뀌어도 Part 전체를 다시 쓴다
mutation(ALTER TABLE UPDATE/DELETE)은 영향을 받는 행이 포함된 모든 데이터 Part를 새 버전으로 다시 쓰는 무거운 백그라운드 작업이다 — 100GB짜리 Part 안의 단 한 행만 바뀌어도 mutation은 그 Part의 모든 컬럼을 100GB 그대로 다시 쓴다. 이는 clickhouse-learn-01에서 다룬 Part의 불변성(immutable) 원칙 때문이다 — Part는 제자리에서 수정될 수 없으므로, 무언가를 바꾸려면 그 Part 전체의 새 버전을 만들어야 한다.
핵심 포인트
- mutation은 영향받는 Part 전체를 새 버전으로 다시 씀 — 한 행만 바뀌어도 그 Part의 모든 컬럼을 통째로 재작성
- Part 불변성 원칙(clickhouse-learn-01) 때문 — 제자리 수정이 불가능해 항상 Part의 새 버전을 만들어야 함
Lightweight DELETE — DELETE를 '컬럼 하나짜리 UPDATE'로 바꿔치기한다
Lightweight DELETE는 삭제라는 특수한 경우에 이 비용을 피하는 전략을 쓴다 — 실제로 행을 즉시 지우는 대신, 내부적으로 _row_exists라는 특수 마스크 컬럼을 0으로 설정하는 ALTER TABLE ... UPDATE로 재작성된다. 이 경량 mutation은 오직 _row_exists 컬럼만 (재)쓰고, 나머지 모든 컬럼은 하드링크로 그대로 연결해 불필요한 I/O를 피한다. 삭제 표시된 행은 다음 병합(clickhouse-learn-30의 병합 선택 알고리즘)이 그 Part를 실제로 합칠 때가 돼서야 물리적으로 제거되고, 그전까지는 쿼리 시점에 필터링만 되어 결과에서 안 보인다.
핵심 포인트
- Lightweight DELETE는 내부적으로 _row_exists 마스크 컬럼만 0으로 바꾸는 ALTER TABLE...UPDATE로 재작성 — 나머지 컬럼은 하드링크로 그대로 유지(I/O 회피)
- 삭제 표시된 행은 쿼리 시점에만 필터링되고, 다음 병합(clickhouse-learn-30)이 일어날 때 비로소 물리적으로 제거
그래도 일반 mutation을 써야 하는 경우 — 디스크 공간 보장이 필요할 때
Lightweight DELETE는 대부분의 경우 더 적합하지만, 병합이 일어나기 전까지는 디스크 공간이 실제로 줄어들지 않는다는 특성이 있다. 그래서 삭제와 동시에 디스크 공간 확보를 확실히 보장해야 하는 경우(예: 컴플라이언스 요구사항으로 데이터가 물리적으로 즉시 지워졌음을 보장해야 하는 상황)에는, 병합을 기다리지 않고 전체 Part를 즉시 재작성하는 일반 mutation 기반 접근을 오히려 선호할 수 있다.
핵심 포인트
- Lightweight DELETE는 병합 전까지 디스크 공간이 실제로 줄지 않음 — 디스크 공간 즉시 확보를 보장해야 하면(컴플라이언스 등) 일반 mutation이 오히려 적합할 수 있음