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_id는 smallint입니다. 다음 동적 관리 개체에서 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
sys.dm_exec_query_statistics_xml
DMV를 사용하여 모니터링 저장 프로시저를 실행하는 동안 가능한 임의 AV(액세스 위반)를 소유하므로 실행 계획 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을 포함하는 실행 계획 XML 특성 <ParameterList> 값 ParameterRuntimeValue
의 컬렉션이 다시 사용하도록 설정되었습니다. 이 추적 플래그를 사용하면 추가 오버헤드가 발생하는 비용으로 런타임 매개 변수 값을 수집할 수 있습니다.
Warning
추적 플래그 2446은 프로덕션 환경에서 계속 사용하도록 설정되는 것이 아니며 시간이 제한된 문제 해결 목적으로만 사용됩니다. 이 추적 플래그를 사용하면 sys.dm_exec_query_statistics_xml
DMV가 호출되었는지 여부에 관계없이 런타임 매개 변수 정보를 사용하여 Showplan XML 조각을 만들므로 추가적인 CPU 및 메모리 오버헤드가 상당히 많이 발생할 수 있습니다.
참고 항목
SQL Server 2022 (16.x), Azure SQL 데이터베이스 및 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실행 계획 출력이 반환되지 않습니다.
- 지정된 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)