Dela via


sys.dm_exec_query_statistics_xml (Transact-SQL)

gäller för: SQL Server 2016 (13.x) och senare Azure SQL DatabaseAzure SQL Managed Instance

Returnerar frågekörningsplan för begäranden under flygning. Använd den här DMV:en för att hämta showplan-XML med tillfällig statistik.

Syntax

sys.dm_exec_query_statistics_xml(session_id)

Argumentpunkter

session_id

Sessions-ID:n som kör batchen som ska letas upp. session_id är småint. session_id kan hämtas från följande dynamiska hanteringsobjekt:

Tabellen returneras

Kolumnnamn Datatyp Beskrivning
session_id smallint ID för sessionen. Inte nullbar.
request_id int ID för begäran. Inte nullbar.
sql_handle varbinary(64) En token som unikt identifierar den batch eller lagrade procedur som frågan ingår i. Nullbar.
plan_handle varbinary(64) En token som unikt identifierar en frågekörningsplan för en batch som körs för närvarande. Nullbar.
query_plan xml Innehåller runtime Showplan-representationen av frågekörningsplanen som anges med plan_handle, och som innehåller partiell statistik. Showplan är i XML-format. En plan genereras för varje batch som innehåller till exempel ad hoc-Transact-SQL-instruktioner, lagrade proceduranrop och användardefinierade funktionsanrop. Nullbar.

Begränsningar

På grund av en eventuell slumpmässig åtkomstkränkning (AV) vid körning av en övervakningslagrad procedur med sys.dm_exec_query_statistics_xml DMV togs Showplan XML-attributet <ParameterList>-värde ParameterRuntimeValue bort i SQL Server 2017 (14.x) CU 26 och SQL Server 2019 (15.x) CU 12. Det här värdet kan vara användbart när du felsöker tidskrävande lagrade procedurer. Du kan återaktivera det här värdet i SQL Server 2017 (14.x) CU 31, SQL Server 2019 (15.x) CU 19 och senare versioner med hjälp av Spårningsflagga 2446. Den här spårningsflaggan möjliggör insamling av körningsparametervärdet på bekostnad av extra omkostnader.

Försiktighet

Spårningsflagga 2446 är inte avsedd att aktiveras kontinuerligt i en produktionsmiljö, utan endast för tidsbegränsade felsökningsändamål. Med den här spårningsflaggan introduceras extra och möjligen betydande processor- och minnesomkostnader, eftersom det skapar ett Showplan XML-fragment med körningsparameterinformation, oavsett om sys.dm_exec_query_statistics_xml DMV anropas eller inte.

I SQL Server 2022 (16.x), Azure SQL Database och Azure SQL Managed Instance kan du utföra samma funktioner på databasnivå med hjälp av FORCE_SHOWPLAN_RUNTIME_PARAMETER_COLLECTION alternativet i ALTER DATABASE SCOPED CONFIGURATION (Transact-SQL).

Anmärkningar

Den här systemfunktionen är tillgänglig från och med SQL Server 2016 (13.x) med Service Pack 1. Mer information finns i KB-3190871.

Den här systemfunktionen fungerar under både standard - och lättviktsinfrastrukturen för frågekörningsstatistikprofilering. Mer information finns i infrastruktur för frågeprofilering.

Under följande villkor returneras inga Showplan-utdata i kolumnen i query_plan den returnerade tabellen för sys.dm_exec_query_statistics_xml:

  • Om frågeplanen som motsvarar den angivna session_id inte längre körs är kolumnen i query_plan den returnerade tabellen null. Det här villkoret kan till exempel inträffa om det finns en tidsfördröjning mellan när planhandtaget registrerades och när det användes med sys.dm_exec_query_statistics_xml

På grund av en begränsning i antalet kapslade nivåer som tillåts i xml-datatypen kan sys.dm_exec_query_statistics_xml det inte returnera frågeplaner som uppfyller eller överskrider 128 nivåer av kapslade element. I tidigare versioner av SQL Server hindrade det här villkoret frågeplanen från att returneras och genererar fel 6335. I SQL Server 2005 (9.x) Service Pack 2 och senare versioner query_plan returnerar NULLkolumnen .

Behörigheter

Kräver VIEW SERVER STATE behörighet på servern, i SQL Server 2019 (15.x) och tidigare versioner.

Kräver VIEW SERVER PERFORMANCE STATE behörighet på servern, i SQL Server 2022 (16.x) och senare versioner.

Kräver behörigheten VIEW DATABASE STATE i databasen på SQL Database Premium-nivåer.

Kräver serveradministratören eller ett Microsoft Entra-administratörskonto på SQL Database Standard- och Basic-nivåer.

Exempel

A. Titta på live-frågeplan och körningsstatistik för en batch som körs

I följande exempel frågar sys.dm_exec_requests du efter den intressanta frågan och kopierar den session_id från utdata.

SELECT *
FROM sys.dm_exec_requests;
GO

För att hämta live-frågeplanen och körningsstatistiken använder du sedan den kopierade session_id med systemfunktionen sys.dm_exec_query_statistics_xml. Kör den här frågan i en annan session än den session där frågan körs.

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

Eller kombinerat för alla begäranden som körs. Kör den här frågan i en annan session än den session där frågan körs.

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