피드로 돌아가기
Dev.toDatabase
원문 읽기
ClickHouse FINAL의 쿼리 결과 정제와 물리 저장소 최적화의 메커니즘 분리 분석
SELECT FINAL and OPTIMIZE FINAL Are Not the Same Thing
AI 요약
Context
ReplacingMergeTree 등 MergeTree 계열 엔진 사용 시 중복 데이터가 조회되는 현상 발생. 이를 해결하기 위한 FINAL 키워드의 두 가지 서로 다른 작동 방식에 대한 혼동 및 오용 사례 존재.
Technical Solution
- SELECT FINAL을 통한 쿼리 실행 시점의 일시적 Merge 로직 적용으로 최종 상태의 결과값 도출
- 디스크 내 물리적 데이터 변경 없이 Read-time에만 정제된 데이터를 제공하는 가상 뷰 방식의 작동
- OPTIMIZE TABLE FINAL을 통한 물리적 Part 병합 및 구버전 데이터의 실제 삭제 수행
- 저장소 계층의 데이터를 재작성하여 Disk I/O를 통해 데이터 구조를 최적화하는 Storage Operation 수행
- Partition 경계를 넘지 않는 병합 제약 조건을 통한 파티션별 독립적 최적화 구조 유지
- 백그라운드 Merge 프로세스와의 간섭을 최소화하기 위해 강제 병합의 빈도를 제한하는 운영 전략 채택
실천 포인트
- 최신 상태의 데이터 확인이 즉시 필요한 경우에만 SELECT FINAL 적용 - 물리적 저장 공간 확보 및 파티션 최적화가 필요한 특수 상황에서만 OPTIMIZE FINAL 실행 - OPTIMIZE FINAL의 과도한 사용으로 인한 Disk I/O 부하 및 시스템 성능 저하 가능성 검토 - Partition By 설정에 따른 병합 범위 제한 사항을 고려하여 최적화 범위 설계