optimize_and_compare_chain_* 세션 설정

optimize_and_compare_chain_* 세션 설정

이 페이지에서는 AND 체인의 비교식을 최적화하는 optimize_and_compare_chain_* 세션 설정들을 다뤄요. 상수 비교를 전파해 필터링 능력을 향상시키고, 최적화에 사용되는 작업 예산을 제한할 수 있어요. 이 설정들은 system.settings 테이블에서 확인할 수 있으며 ClickHouse 소스에서 자동 생성돼요.

출처: 문서

본문

이 설정들은 system.settings에서 확인할 수 있으며 소스에서 자동 생성돼요.

optimize_and_compare_chain

AND 체인의 상수 비교를 전파하여 필터링 능력을 향상시켜요. <, <=, >, >=, = 연산자와 그 조합을 지원해요. 예를 들어 (a < b) AND (b < c) AND (c < 5)(a < b) AND (b < c) AND (c < 5) AND indexHint(b < 5) AND indexHint(a < 5)가 돼요. 파생된 비교식은 indexHint로 감싸져서 인덱스 분석(기본 키, 파티션 키, skipping index)에 참여하고 읽기 집합을 줄이지만, 행마다 비용이 들지 않고 PREWHERE에는 영향을 주지 않아요. 서로 다른 테이블의 표현식을 통해 파생된 비교식은 실행 가능한 상태로 남아요((t1.a < t2.b) AND (t2.b < 5)는 일반 t1.a < 5를 파생): 이것은 조인 아래로 내려갈 수 있는 유일한 조건으로, 원래 체인이 도달할 수 없는 조인 입력을 필터링해요. 기존 조건과 모순되는 파생 비교식도 일반 조건으로 추가되어 ANDfalse로 접히게 돼요.

optimize_and_compare_chain_max_hash_work

쿼리 분석 중 optimize_and_compare_chain 최적화에 사용되는 작업 예산으로, getTreeHash가 해시한 쿼리 트리 노드 수로 측정돼요(이 최적화의 지배적 비용). 최적화를 적용하면서 쿼리가 그보다 많은 노드를 해시하면 나머지 쿼리에 대해서는 최적화 적용을 중단해요. 이는 매우 많거나 매우 큰 AND-체인 비교식이 있는 쿼리에서 분석 시간을 제한하는데, 그런 경우 최적화가 아무것도 접지 못하면서 분석을 지배할 수 있기 때문이에요. 일찍 멈추는 것은 항상 안전해요: 최적화를 포기할 뿐 결과를 바꾸지 않아요. 예산을 비활성화하려면(무제한) 0으로 설정해요.

더 알아보기 (Learn more)