DOP(병렬 처리 수준) 피드백

적용 대상: SQL Server 2022(16.x)

SQL Server 2022(16.x)는 경과된 시간과 대기 시간을 기준으로 반복 쿼리에 대한 병렬 처리 비효율성을 식별하여 쿼리 성능을 개선하기 위해 DOP(병렬 처리 수준) 피드백이라는 새로운 기능을 도입했습니다. DOP 피드백은 지능형 쿼리 처리 기능 제품군의 일부이며 반복 쿼리에 대한 병렬 처리의 차선 사용을 해결합니다. 이 시나리오는 과도한 병렬 처리로 인해 성능 문제가 발생할 수 있는 경우 리소스 사용량을 최적화하고 워크로드의 확장성을 개선하는 데 도움이 됩니다.

각 쿼리에 대한 모든 것을 포괄하는 기본 또는 수동 조정을 수행하는 대신 DOP 피드백은 이러한 문제를 피하기 위해 DOP를 자체 조정합니다.

다른 쿼리 피드백 기능은 메모리 부여 피드백CE(카디널리티 추정) 피드백을 참조하세요.

DOP(병렬 처리 수준) 피드백으로 과도한 병렬 처리 방지

각 쿼리에 대한 모든 것을 포괄하는 기본 또는 수동 조정을 수행하는 대신 DOP 피드백은 과도한 병렬 처리를 피하기 위해 DOP를 자체 조정합니다. 병렬 처리 사용이 비효율적이라고 판단되면 DOP 피드백이 구성된 DOP에서 쿼리의 다음 실행에 대한 DOP를 낮추고 도움이 되는지 확인합니다.

병렬 처리는 많은 양의 데이터를 처리하는 보고 및 분석 쿼리에 도움이 되는 경우가 많습니다. 반대로 병렬로 실행되는 OLTP 중심 쿼리는 모든 스레드를 조정하는 데 소요된 시간이 병렬 계획 사용의 이점보다 클 때 성능 문제가 발생할 수 있습니다. 자세한 내용은 병렬 계획 실행을 참조하세요.

  • DOP 피드백을 사용하도록 설정하려면 데이터베이스에서 DOP_FEEDBACK데이터베이스 범위 구성을 사용하도록 설정합니다.

  • 데이터베이스 수준에서 DOP 피드백을 사용하지 않도록 설정하려면 DOP_FEEDBACK데이터베이스 범위 구성을 사용합니다. 예를 들어 사용자 데이터베이스에서 다음을 실행합니다.

    ALTER DATABASE SCOPED CONFIGURATION SET DOP_FEEDBACK = OFF;
    
  • 쿼리 수준에서 DOP 피드백을 사용하지 않도록 설정하려면 DISABLE_DOP_FEEDBACK 쿼리 힌트를 사용합니다.

DOP 피드백이 사용되는 모든 데이터베이스와 "읽기 쓰기" 상태에서 쿼리 저장소 사용하도록 설정해야 합니다. 피드백은 안정적인 수준의 병렬 처리 피드백 값에 도달하면 sys.query_store_plan_feedback 카탈로그 뷰에서 유지됩니다.

DOP 피드백은 데이터베이스 호환성 수준 160(SQL Server 2022(16.x)에서 도입) 이상에서 작동하는 쿼리에 사용할 수 있습니다.

확인된 피드백만 유지됩니다. 조정된 DOP가 성능 회귀를 초래하는 경우 DOP 피드백은 마지막으로 알려진 모범 DOP로 돌아갑니다. 이 컨텍스트에서는 사용자가 취소한 쿼리도 회귀로 인식됩니다. DOP 피드백은 계획을 다시 컴파일하지 않습니다.

안정적인 피드백은 계획을 다시 컴파일하는 경우 다시 확인되며, MAXDOP 설정(MAXDOP 힌트 포함)을 초과하지 않고 위 또는 아래로 다시 조정될 수 있습니다.

SQL Server 2022(16.x)부터 보조 복제본의 쿼리 저장소를 사용하도록 설정할 경우 DOP 피드백도 가용성 그룹의 보조 복제본에 대한 복제본을 인식합니다. DOP 피드백은 주 복제본과 보조 복제본에서 다르게 피드백을 적용할 수 있습니다. 그러나 DOP 피드백은 보조 복제본에 유지되지 않으며 장애 조치 시 이전 주 복제본의 DOP 피드백은 새 주 복제본에 적용되지 않습니다. 장애 조치 시 주 복제본 또는 보조 복제본에 적용된 피드백이 손실됩니다. 자세한 내용은 보조 복제본을 위한 쿼리 저장소를 참조하세요.

DOP(병렬 처리 수준) 피드백 구현

DOP(병렬 처리 수준) 피드백은 경과된 시간과 대기 시간을 기준으로 반복 쿼리에 대한 병렬 처리 비효율성을 식별합니다. 병렬 처리 사용이 비효율적이라고 판단되면 DOP 피드백이 구성된 DOP에서 쿼리의 다음 실행에 대한 DOP를 낮추고 도움이 되는지 확인합니다.

쿼리 자격을 평가하기 위해 조정된 쿼리 경과 시간은 몇 가지 실행에 대해 측정됩니다. 병렬 쿼리 실행 외부에 있는 버퍼 래치, 버퍼 IO 및 네트워크 IO 대기를 무시하여 각 쿼리의 총 경과 시간이 조정됩니다. DOP 피드백 기능의 목표는 쿼리 경과 시간이 약간 증가하더라도 전반적인 동시성을 높이고 대기 시간을 크게 줄이는 것입니다.

확인된 피드백만 유지됩니다. 조정된 DOP가 성능 회귀를 초래하는 경우 DOP 피드백은 마지막으로 알려진 모범 DOP로 돌아갑니다. 이 컨텍스트에서는 사용자가 취소한 쿼리도 회귀로 인식됩니다.

참고 항목

DOP 피드백은 계획을 다시 컴파일하지 않습니다.

DOP(병렬 처리 수준) 피드백 고려 사항

DOP 피드백으로 조정된 모든 쿼리의 최소 DOP는 2입니다. 직렬 실행은 DOP 피드백의 범위를 벗어났습니다.

피드백 정보는 sys.query_store_plan_feedback 카탈로그 뷰를 사용하여 추적할 수 있습니다.

쿼리에 쿼리 저장소를 통해 강제 적용하는 쿼리 계획이 있다면, DOP 피드백은 해당 쿼리에 계속 사용할 수 있습니다.

현재 DOP 피드백은 쿼리 힌트와 호환되지 않습니다. 자세한 내용은 힌트(Transact-SQL) - 쿼리쿼리 저장소 힌트를 참조하세요.

DOP(병렬 처리 수준) 피드백에 대한 확장 이벤트

다음 XE는 DOP(병렬 처리 수준) 피드백에 사용할 수 있습니다.

  • dop_feedback_eligible_query: 쿼리 계획이 DOP 피드백을 받을 수 있게 되면 발생합니다. 다시 컴파일 또는 SQL Server 인스턴스 다시 시작이 발생하는 경우 추가 이벤트가 발생할 수 있습니다.
  • dop_feedback_provided: DOP 피드백이 지정된 쿼리에 대한 데이터를 제공했을 때 발생합니다. 이 이벤트에는 피드백이 처음 제공된 경우의 기준 통계와 후속 피드백이 제공될 때 이전 피드백 통계가 포함됩니다.
  • dop_feedback_validation: 기준선 또는 이전 피드백 통계에 대한 쿼리 런타임 통계에 대한 유효성 검사가 발생할 때 발생합니다.
  • dop_feedback_stabilized: 쿼리에 대한 DOP 피드백이 안정화될 때 발생합니다.
  • dop_feedback_reverted: DOP 피드백이 되돌아갈 때 발생합니다. 제공된 첫 번째 피드백에서 피드백 유효성 검사가 실패하면 이벤트가 발생합니다. 시스템은 피드백 상태로 되돌아갑니다.
  • dop_feedback_analysis_stopped : 쿼리에 대한 DOP 피드백 분석이 중지될 때 발생합니다.

DOP(병렬 처리 수준) 피드백의 지속성

적용 대상: SQL Server(SQL Server 2022(16.x)부터)

DOP 피드백 메커니즘에서 새로운 수준의 병렬 처리가 좋은 것으로 확인되면 이 최적화는 쿼리 저장소 내에서 유지되며 향후 실행을 위한 쿼리에 적절하게 적용됩니다.

이 기능은 SQL Server 2022(16.x)에서 도입되었으며 데이터베이스 호환성 수준 160 이상 또는 QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n 힌트 160 이상에서 작동하는 쿼리에 대해, 쿼리 저장소가 데이터베이스에서 사용되도록 설정하고 "읽기 쓰기" 상태인 경우에 사용할 수 있습니다.