Megosztás a következőn keresztül:


sys.dm_exec_query_statistics_xml (Transact-SQL)

Vonatkozik a következőkre: SQL Server 2016 (13.x) és későbbi verziók Azure SQL DatabaseAzure SQL Managed InstanceSQL database in Microsoft Fabric

A repülés közbeni kérelmek lekérdezés-végrehajtási tervét adja vissza. Ezzel a DMV-vel lekérheti a showplan XML-t átmeneti statisztikákkal.

Szemantika

sys.dm_exec_query_statistics_xml(session_id)

Érvek

session_id

A keresendő köteget végrehajtó munkamenet-azonosító. session_idkis egész szám. session_id a következő dinamikus felügyeleti objektumokból szerezhető be:

Visszaadott tábla

Oszlop neve Adattípus Leírás
session_id smallint A munkamenet azonosítója. Nem null értékű.
request_id int A kérés azonosítója. Nem null értékű.
sql_handle varbinary(64) Egy token, amely egyedileg azonosítja a lekérdezés részét képező feladatcsomagot vagy tárolt eljárást. Nullázható.
plan_handle varbinary(64) Egy jogkivonat, amely egyedileg azonosítja a jelenleg futtatott köteg lekérdezés-végrehajtási tervét. Nullázható.
query_plan xml Tartalmazza a részleges statisztikákat tartalmazó lekérdezés-végrehajtási terv plan_handle futásidejű Showplan-ábrázolását. A Showplan XML formátumú. Minden olyan köteghez létrehozunk egy csomagot, amely például alkalmi Transact-SQL utasításokat, tárolt eljáráshívásokat és felhasználó által definiált függvényhívásokat tartalmaz. Nullázható.

Korlátozások

Az SQL Server 2017 (14.x) CU 26 és AZ SQL Server 2019 (15.x) CU 12-ben a Showplan XML attribútum sys.dm_exec_query_statistics_xml értéke <ParameterList> a DMV-vel ParameterRuntimeValue végzett monitorozási tárolt eljárás végrehajtása során véletlenszerű hozzáférés-megsértés (AV) miatt el lett távolítva. Ez az érték hasznos lehet a hosszan futó tárolt eljárások hibaelhárítása során. Ezt az értéket újra engedélyezheti az SQL Server 2017 (14.x) CU 31, az SQL Server 2019 (15.x) CU 19 és újabb verzióiban a 2446-os nyomkövetési jelző használatával. Ez a nyomkövetési jelző lehetővé teszi a futásidejű paraméter értékének gyűjtését a többletterhelés bevezetésének költségén.

Figyelmeztetés

A 2446-os nyomkövetési jelzőt nem szabad folyamatosan engedélyezni éles környezetben, hanem kizárólag időkorlátos hibaelhárítási célokra. A nyomkövetési jelző használata extra és valószínűleg jelentős processzor- és memóriaterhelést eredményez, mivel létrehoz egy Showplan XML-töredéket futtatókörnyezeti paraméterinformációkkal, függetlenül attól, hogy a sys.dm_exec_query_statistics_xml DMV-t meghívják-e.

Az SQL Server 2022 -ben (16.x), az Azure SQL Database-ben és a felügyelt Azure SQL-példányban ugyanezt a funkciót az adatbázis szintjén is elvégezheti az FORCE_SHOWPLAN_RUNTIME_PARAMETER_COLLECTIONALTER DATABASE SCOPED CONFIGURATION (Transact-SQL) lehetőséggel.

Megjegyzések

Ez a rendszerfüggvény az SQL Server 2016 -tól (13.x) és az 1. szervizcsomaggal érhető el. További információ: KB 3190871.

Ez a rendszerfüggvény szabványos és egyszerűsített lekérdezésvégrehajtási statisztikák profilkészítési infrastruktúrája alatt is működik. További információért lásd: lekérdezésprofilozási infrastruktúra.

Az alábbi feltételek mellett nem kerül Showplan-kimenet a visszaadott táblázat query_plan oszlopába sys.dm_exec_query_statistics_xml esetén.

  • Ha a megadott session_id megfelelő lekérdezési terv már nem fut, a query_plan visszaadott tábla oszlopa null értékű. Ez a feltétel például akkor fordulhat elő, ha a tervfogantyú rögzítése és a használat időpontja között időbeli késés áll fenn sys.dm_exec_query_statistics_xml

Az XML-adattípusban engedélyezett beágyazott szintek számának korlátozása miatt nem lehet olyan lekérdezésterveket visszaadni, sys.dm_exec_query_statistics_xml amelyek megfelelnek vagy meghaladják a beágyazott elemek 128 szintjét. Az SQL Server korábbi verzióiban ez a feltétel megakadályozta, hogy a lekérdezésterv visszatérjen, és a 6335-ös hibát generálja. Az SQL Server 2005 (9.x) Service Pack 2 és újabb verzióiban az query_plan oszlop ad vissza NULL.

Engedélyek

Engedélyre van szükség VIEW SERVER STATE a kiszolgálón, az SQL Server 2019 -ben (15.x) és a korábbi verziókban.

Engedélyre van szükség VIEW SERVER PERFORMANCE STATE a kiszolgálón, az SQL Server 2022 (16.x) és újabb verzióiban.

Az adatbázis engedélyére VIEW DATABASE STATE van szükség az SQL Database Premium-szintjeihez.

A kiszolgáló rendszergazdájának vagy egy Microsoft Entra-rendszergazdai fióknak kell lennie az SQL Database Standard és az Alapszintű szinteken.

Példák

A. Egy futó köteg élő lekérdezéstervének és végrehajtási statisztikáinak vizsgálata

Az alábbi példa lekérdezésekkel sys.dm_exec_requests megkeresheti az érdekes lekérdezést, és kimásolhatja a session_id kimenetből.

SELECT *
FROM sys.dm_exec_requests;
GO

Ezután az élő lekérdezésterv és a végrehajtási statisztikák beszerzéséhez használja a kimásolt session_id rendszerfüggvényt sys.dm_exec_query_statistics_xml. Futtassa ezt a lekérdezést egy másik munkamenetben, mint az a munkamenet, amelyben a lekérdezés fut.

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

Vagy az összes futó kéréshez kombinálva. Futtassa ezt a lekérdezést egy másik munkamenetben, mint az a munkamenet, amelyben a lekérdezés fut.

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