Delen via


sys.dm_exec_query_statistics_xml (Transact-SQL)

Van toepassing op: SQL Server 2016 (13.x) en latere versies van Azure SQL DatabaseAzure SQL Managed Instance

Retourneert het queryuitvoeringsplan voor aanvragen tijdens de vlucht. Gebruik deze DMV om showplan XML met tijdelijke statistieken op te halen.

Syntaxis

sys.dm_exec_query_statistics_xml(session_id)

Argumenten

session_id

De sessie-ID die moet worden opgezocht. session_id is smallint. session_id kan worden verkregen uit de volgende dynamische beheerobjecten:

Tabel geretourneerd

Kolomnaam Gegevenssoort Beschrijving
session_id smallint Id van de sessie. Niet nullwaarde.
request_id int Id van de aanvraag. Niet nullwaarde.
sql_handle varbinary(64) Een token waarmee de batch of opgeslagen procedure waarvan de query deel uitmaakt, uniek wordt geïdentificeerd. Nullable.
plan_handle varbinary(64) Een token dat een queryuitvoeringsplan uniek identificeert voor een batch die momenteel wordt uitgevoerd. Nullable.
query_plan xml Bevat de runtime Showplan-representatie van het queryuitvoeringsplan dat is opgegeven met plan_handle bevat gedeeltelijke statistieken. Showplan heeft een XML-indeling. Er wordt één plan gegenereerd voor elke batch die bijvoorbeeld ad hoc Transact-SQL instructies, opgeslagen procedureaanroepen en door de gebruiker gedefinieerde functieaanroepen bevat. Nullable.

Beperkingen

Vanwege een mogelijke schending van willekeurige toegang (AV) tijdens het uitvoeren van een opgeslagen bewakingsprocedure met de sys.dm_exec_query_statistics_xml DMV, is de waarde <ParameterList> van het Showplan XML-kenmerk ParameterRuntimeValue verwijderd in SQL Server 2017 (14.x) CU 26 en SQL Server 2019 (15.x) CU 12. Deze waarde kan nuttig zijn bij het oplossen van problemen met langlopende opgeslagen procedures. U kunt deze waarde opnieuw inschakelen in SQL Server 2017 (14.x) CU 31, SQL Server 2019 (15.x) CU 19 en latere versies met traceringsvlag 2446. Met deze traceringsvlag kan de runtimeparameterwaarde worden verzameld ten koste van extra overhead.

Waarschuwing

Traceringsvlag 2446 is niet bedoeld om continu in een productieomgeving te worden ingeschakeld, maar alleen voor tijdgebonden probleemoplossingsdoeleinden. Met deze traceringsvlag wordt extra en mogelijk aanzienlijke CPU- en geheugenoverhead geïntroduceerd, omdat er een Showplan XML-fragment wordt gemaakt met runtimeparametergegevens, ongeacht of de sys.dm_exec_query_statistics_xml DMV wel of niet wordt aangeroepen.

In SQL Server 2022 (16.x), Azure SQL Database en Azure SQL Managed Instance kunt u dezelfde functionaliteit op databaseniveau uitvoeren met behulp van de FORCE_SHOWPLAN_RUNTIME_PARAMETER_COLLECTION optie ALTER DATABASE SCOPED CONFIGURATION (Transact-SQL).

Opmerkingen

Deze systeemfunctie is beschikbaar vanaf SQL Server 2016 (13.x) met Service Pack 1. Zie KB-3190871 voor meer informatie.

Deze systeemfunctie werkt zowel onder standaard als lichtgewicht infrastructuur voor profileringsstatistieken van query-uitvoering. Voor meer informatie, zie Infrastructuur voor queryprofilering.

Onder de volgende voorwaarden wordt geen Showplan-uitvoer geretourneerd in de query_plan kolom van de geretourneerde tabel voor sys.dm_exec_query_statistics_xml:

  • Als het queryplan dat overeenkomt met de opgegeven session_id niet meer wordt uitgevoerd, is de query_plan kolom van de geretourneerde tabel null. Deze voorwaarde kan bijvoorbeeld optreden als er een tijdsvertraging is tussen het moment waarop de plangreep is vastgelegd en wanneer deze is gebruikt met sys.dm_exec_query_statistics_xml

Vanwege een beperking in het aantal geneste niveaus dat is toegestaan in het xml-gegevenstype , sys.dm_exec_query_statistics_xml kunnen geen queryplannen retourneren die voldoen aan of groter zijn dan 128 niveaus van geneste elementen. In eerdere versies van SQL Server heeft deze voorwaarde voorkomen dat het queryplan retourneert en fout 6335 genereert. In SQL Server 2005 (9.x) Service Pack 2 en latere versies retourneert query_plande NULL kolom .

Machtigingen

Hiervoor is machtiging vereist VIEW SERVER STATE op de server, in SQL Server 2019 (15.x) en eerdere versies.

Hiervoor is machtiging vereist VIEW SERVER PERFORMANCE STATE op de server, in SQL Server 2022 (16.x) en latere versies.

Hiervoor is de VIEW DATABASE STATE machtiging in de database vereist voor SQL Database Premium-lagen.

Vereist een serverbeheerder of een Microsoft Entra-beheerdersaccount op SQL Database Standard- en Basic-niveaus.

Voorbeelden

A. Bekijk het live queryplan en de uitvoeringsstatistieken voor een lopende batch

In het volgende voorbeeld worden query's uitgevoerd sys.dm_exec_requests om de interessante query te vinden en de query uit de uitvoer te kopiëren session_id .

SELECT *
FROM sys.dm_exec_requests;
GO

Als u vervolgens het livequeryplan en de uitvoeringsstatistieken wilt ophalen, gebruikt u de gekopieerde session_id functie met de systeemfunctie sys.dm_exec_query_statistics_xml. Voer deze query uit in een andere sessie dan de sessie waarin uw query wordt uitgevoerd.

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

Of gecombineerd voor alle actieve aanvragen. Voer deze query uit in een andere sessie dan de sessie waarin uw query wordt uitgevoerd.

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