
OPTIMIZE FINAL 작업은 피해야 합니다. 이 작업은
리소스를 많이 소모하는 연산을 수행하므로 클러스터 성능에 영향을 줄 수 있습니다.
OPTIMIZE FINAL과 FINAL의 차이OPTIMIZE FINAL은 FINAL과 다릅니다. ReplacingMergeTree처럼
중복 없는 결과를 얻기 위해 FINAL을 사용해야 하는 경우가 있습니다. 일반적으로
쿼리가 프라이머리 키에 포함된 컬럼과 동일한 컬럼으로 필터링된다면 FINAL은 사용해도 괜찮습니다.왜 피해야 하나요?
비용이 많이 듭니다
OPTIMIZE FINAL을 실행하면 ClickHouse는 이미 큰 규모의 머지가 완료된 경우에도 모든 활성 파트를 하나의 파트로 머지하도록 강제합니다. 이 과정에는 다음이 포함됩니다.
- 모든 파트 압축 해제
- 데이터 머지
- 데이터 재압축
- 최종 파트를 디스크 또는 객체 스토리지에 기록
안전 제한을 무시합니다
OPTIMIZE FINAL은 이 안전장치를 무시하므로 다음과 같은 문제가 발생할 수 있습니다.
- 여러 개의 150 GB 파트를 하나의 매우 큰 파트로 머지하려고 시도할 수 있습니다
- 이로 인해 머지 시간이 길어지거나, 메모리 압박, 심지어 메모리 부족 오류까지 발생할 수 있습니다
- 이렇게 커진 파트는 이후 머지가 어려워질 수 있습니다. 즉, 앞서 설명한 이유로 추가 머지 시도가 실패할 수 있습니다. 올바른 쿼리 시점 동작을 위해 머지가 필요한 경우, ReplacingMergeTree에서 업서트에 중복 제거를 사용하는 경우처럼 중복이 누적되어 쿼리 시점 성능이 저하되는 등 바람직하지 않은 결과가 발생할 수 있습니다.