피드로 돌아가기
SELECT FINAL and OPTIMIZE FINAL Are Not the Same Thing
Dev.toDev.to
Database

ClickHouse FINAL의 쿼리 결과 정제와 물리 저장소 최적화의 메커니즘 분리 분석

SELECT FINAL and OPTIMIZE FINAL Are Not the Same Thing

Mohamed Hussain S2026년 6월 13일4intermediate

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 설정에 따른 병합 범위 제한 사항을 고려하여 최적화 범위 설계

원문 읽기