sys.dm_exec_query_statistics_xml(Transact-SQL)

적용 대상: SQL Server 2016(13.x) 이상 Azure SQL DatabaseAzure SQL Managed Instance

실행 중인 요청에 대한 쿼리 실행 계획을 반환합니다. 이 DMV를 사용하여 일시적인 통계를 사용하여 실행 계획 XML을 검색합니다.

구문

sys.dm_exec_query_statistics_xml(session_id)  

인수

session_id
조회할 일괄 처리를 실행하는 세션 ID입니다. session_id 작습니다. session_id 다음 동적 관리 개체에서 가져올 수 있습니다.

반환된 테이블

열 이름 데이터 형식 설명
session_id smallint 세션의 ID입니다. Null을 허용하지 않습니다.
request_id int 요청의 ID입니다. Null을 허용하지 않습니다.
sql_handle varbinary(64) 쿼리가 속하는 일괄 처리 또는 저장 프로시저를 고유하게 식별하는 토큰입니다. Nullable.
plan_handle varbinary(64) 현재 실행 중인 일괄 처리에 대한 쿼리 실행 계획을 고유하게 식별하는 토큰입니다. Nullable.
query_plan xml 부분 통계를 포함하는 plan_handle 지정한 쿼리 실행 계획의 런타임 실행 계획 표현을 포함합니다. 실행 계획은 XML 형식입니다. 임시 Transact-SQL 문, 저장 프로시저 호출, 사용자 정의 함수 호출 등이 포함된 각 일괄 처리에 대해 계획 하나가 생성됩니다. Nullable.

설명

Important

DMV를 사용하여 모니터링 저장 프로시저 sys.dm_exec_query_statistics_xml 를 실행하는 동안 가능한 AV(임의 액세스 위반)를 소유하는 Showplan XML 특성 <ParameterList> 값 ParameterRuntimeValue 은 SQL Server 2017(14.x) CU 26 및 SQL Server 2019(15.x) CU 12에서 제거되었습니다. 이 값은 장기 실행 저장 프로시저 문제를 해결하는 동안 유용할 수 있습니다.

SQL Server 2017(14.x) CU 31 및 SQL Server 2019(15.x) CU 19부터 추적 플래그 2446을 포함하는 Showplan XML 특성 <ParameterList> 값 ParameterRuntimeValue 의 컬렉션이 다시 활성화되었습니다. 이 추적 플래그를 사용하면 추가 오버헤드가 발생하는 비용으로 런타임 매개 변수 값을 수집할 수 있습니다.

Warning

추적 플래그 2446은 프로덕션 환경에서 지속적으로 사용하도록 설정되는 것이 아니라 시간 제한 문제 해결 목적으로만 사용됩니다. 이 추적 플래그를 사용하면 sys.dm_exec_query_statistics_xml DMV가 호출되었는지 여부에 관계없이 런타임 매개 변수 정보를 사용하여 Showplan XML 조각을 만들므로 추가적인 CPU 및 메모리 오버헤드가 상당히 많이 발생할 수 있습니다.

참고 항목

SQL Server 2022(16.x), Azure SQL Database 및 Azure SQL Managed Instance부터 데이터베이스 수준에서 이 작업을 수행하려면 ALTER DATABASE SCOPED CONFIGURATION(Transact-SQL)FORCE_SHOWPLAN_RUNTIME_PARAMETER_COLLECTION 옵션을 참조하세요.

이 시스템 함수는 SQL Server 2016(13.x) SP1부터 사용할 수 있습니다. KB 3190871 참조

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

다음 조건에서는 sys.dm_exec_query_statistics_xml 대해 반환된 테이블의 query_plan 열에 Showplan 출력이 반환되지 않습니다.

  • 지정된 session_id 해당하는 쿼리 계획이 더 이상 실행 되지 않으면 반환된 테이블의 query_plan 열이 null입니다. 예를 들어 계획 핸들이 캡처된 시간과 sys.dm_exec_query_statistics_xml 함께 사용된 시간 사이에 시간이 지연되는 경우 이 조건이 발생할 수 있습니다.

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

사용 권한

SQL Server에서 서버에 대한 권한이 필요합니다 VIEW SERVER STATE .
SQL Database 프리미엄 계층에서 데이터베이스에 대한 VIEW DATABASE STATE 권한이 필요합니다. SQL Database 표준 및 기본 계층에서는 서버 관리자 또는 Microsoft Entra 관리자 계정이 필요합니다.

SQL Server 2022 이상에 대한 권한

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

예제

A. 실행 중인 일괄 처리에 대한 라이브 쿼리 계획 및 실행 통계 살펴보기

다음 예제에서는 sys.dm_exec_requests 쿼리하여 흥미로운 쿼리를 찾고 출력에서 복사합니다 session_id .

SELECT * FROM sys.dm_exec_requests;  
GO  

그런 다음 라이브 쿼리 계획 및 실행 통계를 가져오려면 복사한 session_id 시스템 함수 sys.dm_exec_query_statistics_xml 사용합니다.

--Run this in a different session than the session in which your query is running.
SELECT * FROM sys.dm_exec_query_statistics_xml(< copied session_id >);  
GO  

또는 실행 중인 모든 요청에 대해 결합됩니다.

--Run this in a different session than the session in which your query is running.
SELECT 
	eqs.query_plan, 
	er.session_id, 
	er.request_id, 
	er.database_id,
	er.start_time,
	er.[status], 
	er.wait_type,
	er.wait_resource, 
	er.last_wait_type,
	(er.cpu_time/1000) AS cpu_time_sec,
	(er.total_elapsed_time/1000)/60 AS elapsed_time_minutes,
	(er.logical_reads*8)/1024 AS logical_reads_KB,
	er.granted_query_memory,
	er.dop,
	er.row_count, 
	er.query_hash, 
	er.query_plan_hash
FROM sys.dm_exec_requests er
	CROSS APPLY sys.dm_exec_query_statistics_xml(session_id) eqs
WHERE er.session_id <> @@spid;
GO

참고 항목

추적 플래그
동적 관리 뷰 및 함수(Transact-SQL)
데이터베이스 관련 동적 관리 뷰(Transact-SQL)