sys.dm_exec_query_plan_stats(Transact-SQL)

적용 대상: SQL Server 2019 (15.x) Azure SQL DatabaseAzure SQL Managed Instance

이전에 캐시된 쿼리 계획에 대해 마지막으로 알려진 실제 실행 계획과 동일한 값을 반환합니다.

구문

sys.dm_exec_query_plan_stats ( plan_handle )

인수

plan_handle

실행되고 해당 계획이 계획 캐시에 있거나 현재 실행 중인 일괄 처리에 대한 쿼리 실행 계획을 고유하게 식별하는 토큰입니다. plan_handlevarbinary(64)입니다.

다음 동적 관리 개체에서 plan_handle을 얻을 수 있습니다.

반환된 테이블

열 이름 데이터 형식 설명
Dbid smallint 이 계획에 해당하는 Transact-SQL 문을 컴파일할 당시 유효했던 컨텍스트 데이터베이스의 ID입니다. 임시 및 준비된 SQL 문의 경우 문이 컴파일된 데이터베이스의 ID입니다.

열은 null을 허용합니다.
objectid int 이 쿼리 계획에 대한 개체의 ID(예: 저장 프로시저 또는 사용자 정의 함수)입니다. 임시 및 준비된 일괄 처리의 경우 이 열은 null입니다.

열은 null을 허용합니다.
number smallint 번호가 매겨진 저장 프로시저 정수입니다. 예를 들어 주문 애플리케이션에 대한 프로시저 그룹은 orderproc;1, orderproc;2 등으로 명명될 수 있습니다. 임시 및 준비된 일괄 처리의 경우 이 열은 null입니다.

열은 null을 허용합니다.
encrypted bit 해당 저장 프로시저가 암호화되었는지 여부를 나타냅니다.

0 = 암호화되지 않음

1 = 암호화됨

열은 null을 허용하지 않습니다.
query_plan xml plan_handle 사용하여 지정된 실제 쿼리 실행 계획의 마지막으로 알려진 런타임 실행 계획 표현을 포함합니다. 실행 계획은 XML 형식입니다. 임시 Transact-SQL 문, 저장 프로시저 호출, 사용자 정의 함수 호출 등이 포함된 각 일괄 처리에 대해 계획 하나가 생성됩니다.

열은 null을 허용합니다.

설명

이 기능은 옵트인 기능입니다. 서버 수준에서 사용하도록 설정하려면 추적 플래그 2451을 사용합니다. 데이터베이스 수준에서 사용하도록 설정하려면 ALTER DATABASE SCOPED CONFIGURATION(Transact-SQL)LAST_QUERY_PLAN_STATS 옵션을 사용합니다.

이 시스템 함수는 간단한 쿼리 실행 통계 프로파일링 인프라에서 작동합니다. 자세한 내용은 쿼리 프로파일링 인프라를 참조 하세요.

Showplan 출력 sys.dm_exec_query_plan_stats 에 포함된 정보는 다음과 같습니다.

  • 캐시된 계획에 있는 모든 컴파일 시간 정보
  • 연산자당 실제 행 수, 총 쿼리 CPU 시간 및 실행 시간, 유출 경고, 실제 DOP, 사용된 최대 메모리 및 부여된 메모리와 같은 런타임 정보

다음 조건에서는 실제 실행 계획에 해당하는 실행 계획 출력이 다음에 대해 sys.dm_exec_query_plan_stats반환된 테이블의 열에 query_plan 반환됩니다.

  • 계획은 sys.dm_exec_cached_plans 찾을 수 있습니다.

  • 실행 중인 쿼리는 복잡하거나 리소스를 사용합니다.

다음 조건에서는 반환된 테이블sys.dm_exec_query_plan_stats의 열에 query_plan 다음과 같은 간단한1개의 실행 계획 출력이 반환됩니다.

  • 계획은 sys.dm_exec_cached_plans 찾을 수 있습니다.

  • 쿼리는 충분히 간단하며 일반적으로 OLTP 워크로드의 일부로 분류됩니다.

1 SELECT(루트 노드 연산자)만 포함하는 실행 계획을 참조합니다.

다음 조건에서는 출력이 반환sys.dm_exec_query_plan_stats되지 않습니다.

  • 사용하여 plan_handle 지정한 쿼리 계획이 계획 캐시에서 제거되었습니다.

    또는

  • 쿼리 계획은 처음에 캐시할 수 없었습니다. 자세한 내용은 실행 계획 캐싱 및 재사용을 참조 하세요.

참고 항목

xml 데이터 형식에서 허용되는 중첩 수준 수의 제한은 중첩된 요소의 128 수준을 충족하거나 초과하는 쿼리 계획을 반환할 수 없음을 의미 sys.dm_exec_query_plan 합니다. 이전 버전의 SQL Server에서는 이 조건으로 인해 쿼리 계획이 반환되지 않고 오류 6335가 생성되었습니다. SQL Server 2005(9.x) 서비스 팩 2 이상 버전에서 열은 NULL을 query_plan 반환합니다.

사용 권한

서버에 대한 VIEW SERVER STATE 권한이 필요합니다.

SQL Server 2022 이상에 대한 권한

서버에 대한 VIEW SERVER PERFORMANCE STATE 권한이 필요합니다.

A. 마지막으로 알려진 실제 쿼리 실행 계획에서 캐시된 특정 계획 살펴보기

다음 예제에서는 sys.dm_exec_cached_plans 흥미로운 계획을 찾고 출력에서 복사하도록 쿼리합니다 plan_handle .

SELECT * FROM sys.dm_exec_cached_plans;
GO

그런 다음 마지막으로 알려진 실제 쿼리 실행 계획을 가져오려면 복사된 plan_handle 시스템 함수 sys.dm_exec_query_plan_stats를 사용합니다.

SELECT * FROM sys.dm_exec_query_plan_stats(< copied plan_handle >);
GO

B. 캐시된 모든 계획에 대해 마지막으로 알려진 실제 쿼리 실행 계획 살펴보기

SELECT *
FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
CROSS APPLY sys.dm_exec_query_plan_stats(plan_handle) AS qps;
GO

C. 마지막으로 알려진 실제 쿼리 실행 계획에서 캐시된 특정 계획 및 쿼리 텍스트 살펴보기

SELECT *
FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
CROSS APPLY sys.dm_exec_query_plan_stats(plan_handle) AS qps
WHERE st.text LIKE 'SELECT * FROM Person.Person%';
GO

D. 트리거에 대한 캐시된 이벤트 살펴보기

SELECT *
FROM sys.dm_exec_cached_plans
CROSS APPLY sys.dm_exec_query_plan_stats(plan_handle)
WHERE objtype ='Trigger';
GO

참고 항목