Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy do: SQL Server 2016 (13.x) i nowsze wersje
Azure SQL Database
Azure SQL Managed Instance
SQL 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_planzwracanej 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 wykorzystaniemsys.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
Powiązana zawartość
- Ustaw flagi śledzenia za pomocą DBCC TRACEON (Transact-SQL)
- dynamiczne widoki zarządzania systemu
- Dynamiczne widoki zarządzania bazami danych (Transact-SQL)