옵티마이저 속성
옵티마이저 속성 (Optimizer properties)
Trino 쿼리 옵티마이저의 최적화 동작을 제어하는 속성들이에요.
출처: 문서
본문
optimizer.dictionary-aggregation
- 타입: boolean
- 기본값:
false - 세션 속성:
dictionary_aggregation
딕셔너리(dictionary)에 대한 집계 최적화를 활성화할지 여부예요.
optimizer.optimize-metadata-queries
- 타입: boolean
- 기본값:
false - 세션 속성:
optimize_metadata_queries
메타데이터로 저장된 값을 사용해 일부 집계를 최적화할지 여부예요. 이것은 Trino가 일부 간단한 쿼리를 상수 시간(constant time)에 실행하게 해 줘요. 현재 이 최적화는 파티션 키의 max, min, approx_distinct과 DISTINCT 집계를 포함한 입력 카디널리티에 영향을 받지 않는 다른 집계에 적용돼요. 이걸 사용하면 일부 쿼리가 크게 빨라질 수 있어요.
주요 단점은 커넥터가 행이 없는 파티션에 파티션 키를 반환하면 잘못된 결과를 낼 수 있다는 점이에요. 특히 Hive 커넥터는 다른 시스템이 만든 빈 파티션을 반환할 수 있어요. Trino는 빈 파티션을 만들 수 없어요.
optimizer.distinct-aggregations-strategy
- 타입: string
- 허용 값:
AUTOMATIC,MARK_DISTINCT,SINGLE_STEP,PRE_AGGREGATE,SPLIT_TO_SUBQUERIES - 기본값:
AUTOMATIC - 세션 속성:
distinct_aggregations_strategy
여러 DISTINCT 집계에 사용할 전략이에요.
SINGLE_STEP— 사전 집계(pre-aggregation) 없이 단일 단계로 DISTINCT 집계를 계산해요. DISTINCT 그룹핑 키의 수가 적으면 성능이 나빠져요.MARK_DISTINCT— 여러 DISTINCT 집계 또는 DISTINCT와 비-DISTINCT 집계가 섞여 있을 때MarkDistinct을 사용해요.PRE_AGGREGATE— 집계와 사전 집계 단계를 조합해 DISTINCT 집계를 계산해요.SPLIT_TO_SUBQUERIES— 집계 입력을 독립적인 하위 쿼리로 나누고, 각 하위 쿼리가 단일 DISTINCT 집계를 계산해서 병렬성을 높여요.AUTOMATIC— 전략을 자동으로 선택해요.
단일 단계(strategy) 전략이 선호돼요. 다만 DISTINCT 그룹핑 키 수가 적어 동시성이 제한되는 경우에는 입력 데이터 통계에 기반해 대체 전략을 선택해요.
optimizer.push-aggregation-through-outer-join
- 타입: boolean
- 기본값:
true - 세션 속성:
push_aggregation_through_outer_join
집계가 outer join 위에 있고 조인의 바깥쪽(outer)에서 온 모든 컬럼이 그룹핑 절에 있으면, 집계를 외부 조인 아래로 내려보내요. 이 최적화는 외부 조인 위의 집계로 재작성되는 상관된 스칼라 서브쿼리(correlated scalar subquery)에 특히 유용해요. 예를 들어:
SELECT * FROM item i
WHERE i.i_current_price > (
SELECT AVG(j.i_current_price) FROM item j
WHERE i.i_category = j.i_category);
더 알아보기 (Learn more)
쿼리 최적화의 다른 측면이 궁금하다면 일반 속성(General properties) 문서를 이어서 읽어 보세요.