Udostępnij za pomocą


sys.dm_exec_query_statistics_xml (Transact-SQL)

Dotyczy do: SQL Server 2016 (13.x) i nowsze wersje Azure SQL DatabaseAzure SQL Managed InstanceSQL database in Microsoft Fabric

Zwraca plan wykonywania zapytań dla żądań w locie. Użyj tego dynamicznego widoku zarządzania, aby pobrać kod XML programu showplan z przejściowymi statystykami.

Składnia

sys.dm_exec_query_statistics_xml(session_id)

Argumenty (w programowaniu)

session_id

Identyfikator sesji dla przetwarzanej partii do sprawdzenia. session_id jest typu smallint. session_id można uzyskać z następujących dynamicznych obiektów zarządzania:

Zwrócona tabela

Nazwa kolumny Typ danych Opis
session_id smallint Identyfikator sesji. Nie może być null.
request_id Int Identyfikator żądania. Nie może być null.
sql_handle varbinary(64) Token, który jednoznacznie identyfikuje partię lub procedurę składowaną, której częścią jest zapytanie. Zmienna mogąca przyjmować wartość null.
plan_handle varbinary(64) Token, który jednoznacznie identyfikuje plan wykonywania zapytania dla aktualnie wykonywanej partii. Zmienna mogąca przyjmować wartość null.
query_plan XML Zawiera reprezentację Showplan środowiska uruchomieniowego planu wykonywania zapytania określonego z plan_handle zawierającego częściowe statystyki. Program Showplan ma format XML. Jeden plan jest generowany dla każdej partii zawierającej na przykład instrukcje ad hoc Transact-SQL, wywołania procedury składowanej i wywołania funkcji zdefiniowane przez użytkownika. Zmienna mogąca przyjmować wartość null.

Ograniczenia

Ze względu na możliwe naruszenie ochrony pamięci (AV) przy wykonywaniu programu do monitorowania procedury składowanej z sys.dm_exec_query_statistics_xml DMV, wartość XML atrybutu programu Showplan <ParameterList>ParameterRuntimeValue została usunięta w programie SQL Server 2017 (14.x) CU 26 i SQL Server 2019 (15.x) CU 12. Ta wartość może być przydatna podczas rozwiązywania problemów z długotrwałymi procedurami składowanymi. Tę wartość można ponownie włączyć w programie SQL Server 2017 (14.x) CU 31, SQL Server 2019 (15.x) CU 19 i nowszych wersjach przy użyciu flagi śledzenia 2446. Ta flaga śledzenia umożliwia zbieranie wartości parametru środowiska uruchomieniowego kosztem wprowadzenia dodatkowych obciążeń.

Ostrożność

Flaga śledzenia 2446 nie jest przeznaczona do ciągłego włączania w środowisku produkcyjnym, ale tylko na potrzeby rozwiązywania problemów ograniczonych czasowo. Użycie tej flagi śledzenia wprowadza dodatkowe i prawdopodobnie znaczące obciążenie procesora CPU i pamięci, ponieważ tworzy fragment XML programu Showplan z informacjami o parametrach środowiska uruchomieniowego, niezależnie od tego, czy dynamiczny widok zarządzania jest wywoływany, czy sys.dm_exec_query_statistics_xml nie.

W SQL Server 2022 (16.x), Azure SQL Database i Azure SQL Managed Instance można osiągnąć tę samą funkcjonalność na poziomie bazy danych za pomocą opcji FORCE_SHOWPLAN_RUNTIME_PARAMETER_COLLECTION w ALTER DATABASE SCOPED CONFIGURATION (Transact-SQL).

Uwagi

Ta funkcja systemowa jest dostępna od programu SQL Server 2016 (13.x) z dodatkiem Service Pack 1. Aby uzyskać więcej informacji, zobacz kb 3190871.

Ta funkcja systemowa działa zarówno w ramach standardowej, jak i lekkiej infrastruktury profilowania statystyk wykonywania zapytań. Aby uzyskać więcej informacji, zobacz Infrastruktura profilowania zapytań.

W następujących warunkach żadne dane wyjściowe programu Showplan nie są zwracane w query_plan kolumnie zwracanej tabeli dla sys.dm_exec_query_statistics_xmlelementu :

  • Jeśli plan zapytania odpowiadający określonemu session_id nie jest już wykonywany, kolumna query_plan zwracanej tabeli ma wartość null. Na przykład ten warunek może wystąpić, jeśli wystąpi opóźnienie między przechwyceniem uchwytu planu a jego wykorzystaniem sys.dm_exec_query_statistics_xml

Ze względu na ograniczenie liczby poziomów zagnieżdżonych dozwolonych w typie danych XML, sys.dm_exec_query_statistics_xml nie może zwrócić planów zapytań, które spełniają lub przekraczają 128 poziomów zagnieżdżonych elementów. We wcześniejszych wersjach programu SQL Server ten warunek uniemożliwił zwracanie planu zapytania i generowanie błędu 6335. W programie SQL Server 2005 (9.x) z dodatkiem Service Pack 2 lub nowszym kolumna query_plan zwraca wartość NULL.

Uprawnienia

Wymaga VIEW SERVER STATE uprawnień na serwerze w programie SQL Server 2019 (15.x) i wcześniejszych wersjach.

Wymaga VIEW SERVER PERFORMANCE STATE uprawnień na serwerze w programie SQL Server 2022 (16.x) i nowszych wersjach.

VIEW DATABASE STATE Wymaga uprawnień w bazie danych w warstwach Premium usługi SQL Database.

Wymaga konta administratora serwera lub konta administratora usługi Microsoft Entra w warstwach Standardowa i Podstawowa usługi SQL Database.

Przykłady

Odp. Spójrz na plan zapytań na żywo i statystyki wykonywania dla uruchomionego zadania

Następujące przykładowe zapytania sys.dm_exec_requests mają na celu znalezienie interesującego zapytania oraz skopiowanie jego session_id z danych wyjściowych.

SELECT *
FROM sys.dm_exec_requests;
GO

Następnie, aby uzyskać plan zapytania na żywo i statystyki wykonania, użyj skopiowanego session_id z funkcją systemową sys.dm_exec_query_statistics_xml. Uruchom to zapytanie w innej sesji niż sesja, w której jest uruchomione zapytanie.

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

Lub połączone dla wszystkich uruchomionych żądań. Uruchom to zapytanie w innej sesji niż sesja, w której jest uruchomione zapytanie.

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