다음을 통해 공유


식에 대한 CE(카디널리티 추정) 피드백

적용 대상:적용 대상: SQL Server 2025(17.x) 미리 보기 Azure SQL DatabaseMicrosoft Fabric Preview의 SQL Database

정확하지 않은 카디널리티 예측은 쿼리 최적화 중 성능 저하를 야기하는 경우가 많습니다. 식에 대한 CE(카디널리티 추정) 피드백은 CE 피드백 기능으로 시작된 프레임워크를 확장합니다. 목표는 반복 식에 대한 카디널리티 예상치를 개선하는 것입니다. 식에 대한 피드백 기능은 쿼리에서 식의 이전 실행에서 학습하여 적절한 CE 모델 선택을 찾고 이러한 식의 향후 실행에 학습된 내용을 적용합니다. CE 피드백과 마찬가지로 모델 권장 사항은 테스트되고 향후 쿼리 실행에 자동으로 적용됩니다.

식 기능에 대한 피드백은 지정된 쿼리의 식 및 데이터 분포에 더 잘 맞는 모델 가정을 식별하고 사용하므로 쿼리 실행 계획 품질이 향상됩니다. 현재 식 기능에 대한 피드백은 예상 행 수와 실제 행 수가 매우 다른 계획 연산자를 식별할 수 있습니다. 피드백은 중요한 모델 추정 오류가 발생할 때 쿼리 내의 식에 적용되며, 시도할 수 있는 대체 모델이 있습니다.

데이터베이스 엔진의 여러 버전에서는 데이터를 배포하고 쿼리하는 방법에 따라 서로 다른 CE 모델 가정을 사용합니다.

표현에 CE 피드백 사용

식에 대한 CE 피드백은 쿼리 실행을 모니터링하고 카디널리티의 잘못된 추정을 일관되게 초래하는 하위 식을 식별합니다. 피드백은 관찰된 패턴을 기반으로 생성되고 쿼리 컴파일 중에 적용되어 예측 정확도를 향상시킵니다.

필수 구성 요소 및 구성

식에 CE 피드백을 사용하려면 다음 필수 조건을 충족해야 합니다.

  • 데이터베이스는 호환성 수준 160 이상을 사용해야 합니다.
  • 데이터베이스 범위 구성을 CE_FEEDBACK_FOR_EXPRESSIONS 사용하도록 설정해야 합니다(기본적으로 사용).
  • 데이터베이스 범위 구성의 현재 상태를 확인하려면 다음을 수행합니다.
SELECT name,
       value,
       value_for_secondary
FROM sys.database_scoped_configurations
WHERE name = 'CE_FEEDBACK_FOR_EXPRESSIONS';

이 기능은 다음 데이터베이스 범위 구성 명령을 사용하여 데이터베이스에서 사용하도록 설정할 수 있습니다.

ALTER DATABASE SCOPED CONFIGURATION SET CE_FEEDBACK_FOR_EXPRESSIONS = ON;

식 기능에 대한 피드백을 비활성화하려면, 데이터베이스 범위 구성을 CE_FEEDBACK_FOR_EXPRESSIONS 비활성화합니다.

ALTER DATABASE SCOPED CONFIGURATION SET CE_FEEDBACK_FOR_EXPRESSIONS = OFF;

작동 방식

지문은 SQL Server 데이터베이스 엔진의 새로운 개념은 아니지만 식 기능에 대한 피드백 컨텍스트의 지문 은 식 내에서 계산된 서명의 조합을 나타냅니다. 예를 들어 가상 비즈니스의 비즈니스 분석가는 해당 고객이 $10,000 이상을 지출한 고객의 주문에 대한 정보를 얻고자 할 수 있습니다. Customers 테이블에서 데이터를 수집하고 Orders 테이블에 조인하는 select 문은 이러한 유형의 데이터를 보기 위한 한 가지 방법일 수 있습니다.

SELECT *
FROM Customer AS C
     INNER JOIN Orders AS O
         ON C.custkey = O.o_custkey
WHERE O.o_totalprice > 10000;

이 쿼리의 경우, 쿼리 최적화 프로그램은 각 테이블에서 데이터를 가져온 다음, 두 테이블에서 모든 관련 열을 선택하고 주문 금액이 $10,000보다 큰 데이터(필터 포함)를 조인하여 결합할 수 있습니다. 쿼리 계획 내의 필터 또는 조인과 같은 각 논리 표현식은 고유 식별자(지문)에 기여하는 서명을 생성합니다. 식에 대한 CE 피드백은 전체 쿼리 구조가 다른 경우에도 이러한 지문을 사용하여 유사한 하위 식 공유 쿼리 간에 피드백을 학습하고 적용합니다.

이 기능은 쿼리 전반에 걸쳐 일관되게 카디널리티를 과대평가하거나 과소평가하는 식에 중점을 둡니다. 현재 CE 피드백에 적합하지 않은 두 가지 워크로드 패턴을 분석합니다.

  • 반복 실행이 없지만 식 패턴이 반복되는 워크로드. 예를 들어 일반적으로 사용되는 조인 패턴입니다.

  • 쿼리의 한 부분이 동일한 쿼리의 다른 부분과 다른 CE 모델의 이점을 얻을 수 있는 쿼리입니다. 예를 들어, 테이블 AB 간의 조인에는 단순 포함이 필요할 수 있으며, 테이블 C와 테이블 D 간의 조인은 기본 수준의 포함이 필요할 수 있습니다.

표현 기능에 대한 피드백은 필터 및 조인 가정을 적용하여 추정 오류 문제를 해결합니다.

Filters:

  • ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES
  • ASSUME_PARTIAL_CORRELATION_FOR_FILTER_ESTIMATES
  • ASSUME_FULL_INDEPENDENCE_FOR_FILTER_ESTIMATES

Joins:

  • ASSUME_JOIN_PREDICATE_DEPENDS_ON_FILTERS
  • 기본 포함 가정(힌트를 전달할 필요가 없음)

이러한 가정은 포함 및 독립성과 같은 다양한 CE 모델 전략을 반영합니다. 개념적 배경에 대한 자세한 내용은 Kate Smith가 설명한 카디널리티 예측 피드백SQL Server 2016의 상관 관계 열에 대한 카디널리티 추정을 참조하세요.

힌트 수명 주기

피드백은 다음 상태를 통해 진행 상황을 암시합니다.

  • 모니터링: 시스템은 하위 식의 반복 실행을 관찰하고 카디널리티 오산이 지속되는지 여부를 추적합니다.
  • 적용: 오산이 계속되면 쿼리 컴파일 중에 피드백 힌트를 생성하고 적용하여 CE 모델을 조정할 수 있습니다.
  • 차단됨: 적용된 힌트로 인해 카디널리티 예상치가 최적이 아니면 나중에 사용할 수 없게 됩니다.

이 수명 주기는 피드백이 유익한 경우에만 적용되고 예측 품질이 회귀되지 않도록 합니다.

회귀 방지

식에 대한 CE 피드백에는 회귀 보호가 포함됩니다. 힌트로 인해 이전보다 카디널리티 예상치가 더 나빠지면 차단됩니다. 그러나 이 보호는 카디널리티 추정으로 제한되며 쿼리 실행 시간을 평가하지 않습니다. 실행/런타임 관련 회귀의 경우 자동 계획 수정이 개입할 수 있습니다. 자동 계획 수정 기능을 사용하도록 설정하지 않은 경우 sys.dm_db_tuning_recommendations 동적 관리 뷰를 쿼리하여 기능에서 수행할 작업을 기록하고 사용할 수 있습니다.

원격 분석 및 모니터링

식 작업에 대한 CE 피드백은 다음 도구를 사용하여 모니터링할 수 있습니다.

  • 확장 이벤트:
    • adhoc_ce_feedback_query_level_telemetry
    • query_adhoc_ce_feedback_expression_hint
    • query_adhoc_ce_feedback_hint

CE 피드백 확장 이벤트 query_ce_feedback_begin_analysisquery_ce_feedback_telemetry 기능의 활동을 추적 하는 동안 유용할 수도 있습니다.

  • 지문 데이터는 명명 AdHocCEFeedbackCache된 전용 메모리 클럭에 캐시됩니다. 이 캐시는 시스템 카탈로그 뷰 sys.dm_exec_ce_feedback_cache를 통해 액세스할 수 있습니다.

  • 실행 계획 통합

    식 힌트에 대한 CE 피드백이 적용되면 쿼리 계획에는 Showplan XML의 특성이 포함됩니다 CardinalityFeedback . 이 태그는 피드백이 특정 하위 식에 대한 카디널리티 예상치를 조정하는 데 사용되었음을 나타냅니다.

캐시 및 지속성

지속형 피드백은 내부 쿼리 저장소 테이블(sys.plan_persist_ce_feedback_for_expressions)에 저장되고 시작 시 다시 로드됩니다. 이렇게 하면 시스템이 이미 발견된 지문에 대한 피드백을 다시 학습할 필요가 없습니다. 캐시 지속성 메커니즘은 본질적으로 손실되므로 피드백은 주기적으로 디스크에만 유지됩니다. 지속성 빈도는 현재 구성할 수 없습니다.

SQL Server 인스턴스가 다시 시작되거나 다음 지속성 주기 전에 메모리가 지워지면 마지막 플러시 이후 생성된 피드백이 손실될 수 있습니다.

Limitations

현재 읽기 전용 보조 데이터베이스의 쿼리 저장소에는 지속성이 지원되지 않습니다. 식에 대한 CE 피드백은 주 복제본 및 보조 복제본에서 피드백을 다르게 적용할 수 있습니다. 그러나 피드백은 보조 복제본에서 유지되지 않으며 해당 시나리오의 메모리 기반 캐시 내에만 존재합니다. 장애 조치 이벤트가 발생하면 읽기 가능한 보조 복제본에서 학습된 피드백이 사라집니다.