다음을 통해 공유


sys.dm_exec_query_statistics_xml(Transact-SQL)

적용 대상:SQL Server 2016(13.x) 이상 Azure SQL 데이터베이스Azure SQL Managed Instance

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

구문

sys.dm_exec_query_statistics_xml(session_id)

인수

session_id

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

반환된 테이블

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

제한점

DMV를 사용하여 모니터링 저장 프로시저 sys.dm_exec_query_statistics_xml 를 실행하는 동안 AV(임의 액세스 위반)가 발생할 수 있으므로 실행 계획 XML 특성 <ParameterList>ParameterRuntimeValue 은 SQL Server 2017(14.x) CU 26 및 SQL Server 2019(15.x) CU 12에서 제거되었습니다. 이 값은 장기 실행 저장 프로시저 문제를 해결하는 동안 유용할 수 있습니다. 추적 플래그 2446을 사용하여 SQL Server 2017(14.x) CU 31, SQL Server 2019(15.x) CU 19 이상 버전에서 이 값을 다시 사용하도록 설정할 수 있습니다. 이 추적 플래그를 사용하면 추가 오버헤드를 도입하는 비용으로 런타임 매개 변수 값을 수집할 수 있습니다.

주의

추적 플래그 2446은 프로덕션 환경에서 계속 사용하도록 설정되는 것이 아니며 시간이 제한된 문제 해결 목적으로만 사용됩니다. 이 추적 플래그를 사용하면 DMV가 호출되는지 여부에 관계없이 sys.dm_exec_query_statistics_xml 런타임 매개 변수 정보를 사용하여 실행 계획 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 데이터베이스 수준에서 동일한 기능을 수행할 수 있습니다.

설명

이 시스템 함수는 서비스 팩 1이 있는 SQL Server 2016(13.x)부터 사용할 수 있습니다. 자세한 내용은 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를 반환합니다.

사용 권한

VIEW SERVER STATE SQL Server 2019(15.x) 및 이전 버전에서 서버에 대한 권한이 필요합니다.

VIEW SERVER PERFORMANCE STATE SQL Server 2022(16.x) 이상 버전에서 서버에 대한 권한이 필요합니다.

데이터베이스의 SQL Database 프리미엄 계층에서 VIEW DATABASE STATE 권한이 필요합니다.

SQL Database 표준 및 기본 계층의 서버 관리자 또는 Microsoft Entra 관리자 계정이 필요합니다.

예제

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

다음 예에서는 sys.dm_exec_requests를 쿼리하여 필요한 쿼리를 찾고 출력에서 session_id을 복사합니다.

SELECT *
FROM sys.dm_exec_requests;
GO

그런 다음, 복사한 session_id를 시스템 함수 sys.dm_exec_query_statistics_xml과 함께 사용하여 라이브 쿼리 계획 및 실행 통계를 가져옵니다. 쿼리가 실행되는 세션과 다른 세션에서 이 쿼리를 실행합니다.

SELECT * FROM sys.dm_exec_query_statistics_xml(< copied session_id >);
GO

또는 실행 중인 모든 요청에 대해 결합됩니다. 쿼리가 실행되는 세션과 다른 세션에서 이 쿼리를 실행합니다.

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 AS er
CROSS APPLY sys.dm_exec_query_statistics_xml(session_id) AS eqs
WHERE er.session_id <> @@SPID;
GO