Sdílet prostřednictvím


sys.dm_exec_query_statistics_xml (Transact-SQL)

Platí na: SQL Server 2016 (13.x) a novější verze Azure SQL DatabaseAzure SQL Managed InstanceSQL database in Microsoft Fabric

Vrátí plán provádění dotazů pro požadavky na letu. Pomocí této DMV načtěte XML Showplanu s přechodnými statistikami.

Syntaxe

sys.dm_exec_query_statistics_xml(session_id)

Arguments

session_id

ID relace, které spouští dávku, jež má být vyhledána. session_id je typu smallint. session_id lze získat z následujících objektů dynamické správy:

Vrácená tabulka

Název sloupce Datový typ Popis
session_id smallint ID relace. Není nulovatelný.
request_id int ID požadavku. Není nulovatelný.
sql_handle varbinary(64) Token, který jednoznačně identifikuje dávku nebo uloženou proceduru, na které je dotaz součástí. Nullable.
plan_handle varbinary(64) Token, který jednoznačně identifikuje plán provádění dotazů pro dávku, která se právě spouští. Nullable.
query_plan xml Obsahuje reprezentaci plánu provádění dotazu zadanou s částečnými plan_handle statistikami modulu runtime Showplan. Showplan je ve formátu XML. Jeden plán se vygeneruje pro každou dávku, která obsahuje například ad hoc příkazy Transact-SQL, volání uložených procedur a volání funkcí definovaná uživatelem. Nullable.

Omezení

Vzhledem k možnému narušení náhodného přístupu (AV) při provádění monitorovací uložené procedury s sys.dm_exec_query_statistics_xml DMV byla hodnota <ParameterList> atributu ParameterRuntimeValue Showplan XML odebrána v SQL Serveru 2017 (14.x) CU 26 a SQL Server 2019 (15.x) CU 12. Tato hodnota může být užitečná při řešení potíží s dlouhotrvajícími uloženými procedurami. Tuto hodnotu můžete znovu povolit v SQL Serveru 2017 (14.x) CU 31, SQL Serveru 2019 (15.x) CU 19 a novějších verzích pomocí příznaku trasování 2446. Tento příznak trasování umožňuje shromažďování hodnoty parametru modulu runtime za cenu zavedení dodatečné režie.

Upozornění

Příznak trasování 2446 není určen k nepřetržitému povolení v produkčním prostředí, ale pouze pro časově omezené účely řešení potíží. Použití tohoto příznaku trasování představuje dodatečné a pravděpodobně významné režijní náklady na procesor a paměť, protože vytváří fragment Showplan XML s informacemi o runtime parametrech, ať už je sys.dm_exec_query_statistics_xml DMV volán, nebo ne.

V SQL Serveru 2022 (16.x), Azure SQL Database a Azure SQL Managed Instance můžete dosáhnout stejného efektu na úrovni databáze pomocí možnosti FORCE_SHOWPLAN_RUNTIME_PARAMETER_COLLECTION v ALTER DATABASE SCOPED CONFIGURATION (Transact-SQL).

Poznámky

Tato systémová funkce je dostupná od SQL Serveru 2016 (13.x) s aktualizací Service Pack 1. Pro více informací si přečtěte KB 3190871.

Tato systémová funkce funguje ve standardní i zjednodušené infrastruktuře profilace statistik provádění dotazů. Další informace najdete v tématu Infrastruktura profilace dotazů.

Za následujících podmínek se ve query_plan sloupci vrácené tabulky nevrátí žádný výstup Showplan pro sys.dm_exec_query_statistics_xml:

  • Pokud plán dotazu odpovídající zadanému session_id již není spuštěn, query_plan sloupec vrácené tabulky má hodnotu null. K této podmínce může dojít například v případě, že došlo k časovému zpoždění mezi zachycením popisovače plánu a jeho použitím s sys.dm_exec_query_statistics_xml

Kvůli omezení počtu vnořených úrovní povolených v datovém typu XML nejdou vracet plány dotazů, sys.dm_exec_query_statistics_xml které splňují nebo překračují 128 úrovní vnořených prvků. V dřívějších verzích SQL Serveru tato podmínka zabránila vrácení plánu dotazu a vygenerování chyby 6335. V systému SQL Server 2005 (9.x) Service Pack 2 a novějších verzích query_plan vrátí NULLsloupec .

Dovolení

Vyžaduje VIEW SERVER STATE oprávnění na serveru, v SQL Serveru 2019 (15.x) a starších verzích.

Vyžaduje VIEW SERVER PERFORMANCE STATE oprávnění na serveru, v SQL Serveru 2022 (16.x) a novějších verzích.

VIEW DATABASE STATE Vyžaduje oprávnění v databázi na úrovních PREMIUM služby SQL Database.

Vyžaduje účet správce serveru nebo správce Microsoft Entra na úrovních Standard a Basic služby SQL Database.

Příklady

A. Podívejte se na živý plán dotazu a statistiky provádění pro právě spuštěnou dávku.

Následující ukázkové sys.dm_exec_requests dotazy najdou zajímavý dotaz a zkopírují ho session_id z výstupu.

SELECT *
FROM sys.dm_exec_requests;
GO

Potom k získání živého plánu dotazu a statistiky provádění použijte zkopírovanou session_id s systémovou funkcí sys.dm_exec_query_statistics_xml. Spusťte tento dotaz v jiné relaci, než je relace, ve které je dotaz spuštěný.

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

Nebo spojte všechny probíhající požadavky. Spusťte tento dotaz v jiné relaci, než je relace, ve které je dotaz spuštěný.

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