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


sys.dm_exec_query_plan (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL-adatbázis a Microsoft Fabricben

Visszaadja a Showplan-t XML formátumban a terv által megadott csomaghoz. A terv által meghatározott terv gyorsítható vagy éppen végrehajtható.

A Showplan XML sémája ezen a Microsoft weboldalon érhető el. Elérhető abban a könyvtárban is, ahol az SQL Server telepítve van.

Transact-SQL szintaxis konvenciók

Szemantika

sys.dm_exec_query_plan(plan_handle)  

Arguments

plan_handle
Ez egy token, amely egyedien azonosítja egy lekérdezés végrehajtási tervet egy olyan tételre, amely már teljesített, és a terve a terv gyorsítótárában van, vagy éppen teljesít. plan_handlevarbinary(64).

A plan_handle a következő dinamikus felügyeleti objektumokból szerezhető be:

Visszaadott tábla

Oszlop név Adattípus Description
dbid smallint Annak a környezeti adatbázisnak az azonosítója, amely a tervnek megfelelő Transact-SQL utasítás fordításakor volt érvényben. Alkalmi és előkészített SQL-utasítások esetén annak az adatbázisnak az azonosítója, amelyben az utasítások fordítása megtörtént.

Az oszlop null értékű.
objectid azonosító int A lekérdezésterv objektumának azonosítója (például tárolt eljárás vagy felhasználó által definiált függvény). Alkalmi és előkészített kötegek esetén ez az oszlop null értékű.

Az oszlop null értékű.
szám smallint Számozott tárolt eljárás egésze. Például a rendelés alkalmazásához tartozó eljárások csoportját orderproc néven is nevezhetik; 1, orderproc; 2, és így tovább. Alkalmi és előkészített kötegek esetén ez az oszlop null értékű.

Az oszlop null értékű.
Titkosított bit Azt jelzi, hogy a megfelelő tárolt eljárás titkosítva van-e.

0 = nincs titkosítva

1 = titkosított

Az oszlop nem nullálható.
query_plan xml Tartalmazza a lekérdezésvégrehajtási terv fordítási idejű Showplan reprezentációját, amely plan_handle-vel van megadva. 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.

Az oszlop null értékű.

Megjegyzések

Az alábbi feltételek mellett a visszaküldött táblázat query_plan oszlopában nem jelenik meg Showplan kimenet sys.dm_exec_query_plan esetén:

  • Ha a plan_handle használatával meghatározott lekérdezési tervet kizárták a terv gyorsítótárából, a visszaküldött tábla query_plan oszlopa null. Például ez az állapot akkor jelentkezhet, ha időbeli késés van a terv fogantyújának rögzítése és a sys.dm_exec_query_plan-vel való használat között.

  • Néhány Transact-SQL utasítás nem kerül gyorstárába, például tömeges műveleti utasítások vagy 8 KB méretnél nagyobb stringliteralokat tartalmazó utasítások. Az ilyen utasításokhoz tartozó XML Showplans nem lehet sys.dm_exec_query_plan használatával visszanyerni, kivéve, ha a batch éppen fut, mert nem léteznek a gyorsítótárban.

  • Ha egy Transact-SQL batch vagy tárolt eljárás tartalmaz egy felhasználó által definiált függvény hívását vagy egy dinamikus SQL-hívást, például EXEC (string) használatával, akkor a felhasználó által definiált függvényhez tartozó lefordított XML Showplan nem szerepel a sys.dm_exec_query_plan által visszaadott táblázatban a batch vagy tárolt eljáráshoz. Ehelyett külön hívást kell végrehajtanod sys.dm_exec_query_plan-hez a felhasználó által definiált függvényhez tartozó terv handle-hez.

Ha egy ad hoc lekérdezés egyszerű vagy kényszerített paraméterezést használ, a query_plan oszlop csak az utasításszöveget tartalmazza, nem a tényleges lekérdezési tervet. A lekérdezési terv visszaküldéséhez hívjuk sys.dm_exec_query_plan a felkészített paraméterezett lekérdezés tervkezelőjét. Megállapíthatod, hogy a lekérdezés paraméterezett-e, ha a sys.syscacheobjects nézet sql oszlopára vagy a sys.dm_exec_sql_text dinamikus menedzsment nézet szövegoszlopára hivatkozik.

Megjegyzés:

Az xml adattípusban engedélyezett beágyazott szintek számának korlátozása miatt sys.dm_exec_query_plan nem tudja visszaadni azokat a lekérdezési terveket, amelyek megfelelnek vagy meghaladják a 128 beágyazott elem 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ókban a query_plan oszlop NULL-ot ad vissza.
A sys.dm_exec_text_query_plan (Transact-SQL) dinamikus menedzsment funkcióval visszaadhatod a lekérdezési terv kimenetét szöveges formátumban.

Permissions

A sys.dm_exec_query_plan végrehajtásához a felhasználónak tagnak kell lennie a rendszergazdai fix szerver szerepének, vagy jogosultnak VIEW SERVER STATE kell lennie a szerveren.

Engedélyek az SQL Server 2022-hez és újabb verziókhoz

A KISZOLGÁLÓ TELJESÍTMÉNYÁLLAPOTÁNAK MEGTEKINTÉSE engedélyre van szükség a kiszolgálón.

Példák

Az alábbi példák bemutatják, hogyan lehet használni a sys.dm_exec_query_plan dinamikus menedzsment nézetet.

Az XML Showplans megtekintéséhez hajtsa végre a következő lekérdezéseket az SQL Server Management Studio Query Editorjában, majd kattintson a ShowPlanXML gombra a sys.dm_exec_query_plan által visszaadott tábla query_plan oszlopában. Az XML Showplan megjelenik a Management Studio összefoglaló panelben. Az XML Showplan fájlba való elmentéséhez jobb kattintással a query_plan oszlopban a ShowPlanXML menüpontra, kattints az Eredmények mentésére úgy, nevezd el a fájlt file_name.sqlplan> formátumban <; például MyXMLShowplan.sqlplan.

A. Gyorsítótározott lekérdezési tervet egy lassan futó Transact-SQL lekérdezéshez vagy batchhez

A különböző típusú Transact-SQL tételek lekérdezési tervei, mint az ad hoc batches, tárolt eljárások és felhasználó által definiált függvények egy memóriaterületen, az úgynevezett tervgyorsítótárban vannak gyorsítva. Minden gyorsítótározott lekérdezési tervet egy egyedi azonosítóval, amit terv fogantyúnak neveznek, azonosítanak. Ezt a terv handle-ét a sys.dm_exec_query_plan dinamikus menedzsment nézettel megadhatod, hogy lekérd a végrehajtási tervet egy adott Transact-SQL lekérdezéshez vagy batchhez.

Ha egy Transact-SQL lekérdezés vagy batch hosszú ideig fut egy adott SQL Server kapcsolaton, kérd vissza az adott lekérdezés vagy batch végrehajtási tervet, hogy kiderítsd, mi okozza a késést. A következő példa bemutatja, hogyan lehet letölteni az XML Showplan-t egy lassan futó lekérdezéshez vagy batchhez.

Megjegyzés:

A példához a session_id és plan_handle értékeit a szerveredre jellemző értékekre cseréld.

Először a lekérdezést vagy kötetet végrehajtó folyamat session ID-jét (SPID) a tárolt eljárás használatával sp_who :

USE master;  
GO  
exec sp_who;  
GO  

Az eredményhalmaz, amelyet visszaad, sp_who azt jelzi, hogy a session ID .54 A dinamikus menedzsment nézettel a session ID-t sys.dm_exec_requests használhatod a terv kezelő oldalának visszakeresésére a következő lekérdezéssel:

USE master;  
GO  
SELECT * FROM sys.dm_exec_requests  
WHERE session_id = 54;  
GO  

A sys.dm_exec_requests által visszaadott tábla azt jelzi, hogy a lassan futó lekérdezés vagy batch terv handle , 0x06000100A27E7C1FA821B10600amit plan_handlesys.dm_exec_query_plan argumentumként megadhatsz a végrehajtási terv XML formátumban történő lekéréséhez az alábbiak szerint. A lassan futó lekérdezés vagy batch XML formátumú végrehajtási terve a tábla query_plan oszlopában található, amelyet a vissza .sys.dm_exec_query_plan

USE master;  
GO  
SELECT * 
FROM sys.dm_exec_query_plan (0x06000100A27E7C1FA821B10600);  
GO  

B. Szerezz le minden lekérdezési tervet a terv gyorsítótárából

Az összes lekérdezési terv pillanatképének megszerzéséhez, amelyek a tervgyorsítótárban találhatók, a dinamikus menedzsment nézet lekérdezésével kérd le a gyorsítótárban sys.dm_exec_cached_plans lévő összes lekérdezési tervet. A terve fogantyúk a plan_handle . sys.dm_exec_cached_plansoszlopában vannak tárolva. Ezután a CROSS APPLY operátorral továbbítsd a terv handle-eket sys.dm_exec_query_plan a következőkben. Az XML Showplan kimenete minden terv számára, amely jelenleg a terv gyorsítótárában van, a query_plan visszaküldött táblázat oszlopában található.

USE master;  
GO  
SELECT * 
FROM sys.dm_exec_cached_plans AS cp 
CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle);  
GO  

C. Kérd vissza minden lekérdezési tervet, amelyhez a szerver lekérdezett statisztikákat gyűjtött a csomag gyorsítótárából

Az összes lekérdezési terv pillanatképének lekéréséhez a szerver jelenleg a tervgyorsítótárban található statisztikákat gyűjtötte, a dinamikus menedzsment nézet lekérdezésével sys.dm_exec_query_stats kérd vissza ezeknek a terveknek a terve handle-eit a gyorsítótárban. A terve fogantyúk a plan_handle . sys.dm_exec_query_statsoszlopában vannak tárolva. Ezután a CROSS APPLY operátorral továbbítsd a terv handle-eket sys.dm_exec_query_plan a következőkben. Az XML Showplan kimenete minden terv esetében, amelyhez a szerver jelenleg statisztikákat gyűjtött a terv gyorsítótárában, a query_plan visszaküldött táblázat oszlopában található.

USE master;  
GO  
SELECT * 
FROM sys.dm_exec_query_stats AS qs 
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle);  
GO  

D. Információt szerezz az öt legfontosabb lekérdezésről az átlagos CPU idő szerint

A következő példa adja vissza a terveket és az átlagos CPU időt az öt legfontosabb lekérdezésre.

SELECT TOP 5 total_worker_time/execution_count AS [Avg CPU Time],  
   plan_handle, query_plan   
FROM sys.dm_exec_query_stats AS qs  
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle)  
ORDER BY total_worker_time/execution_count DESC;  
GO  

Lásd még:

dinamikus felügyeleti nézetek és függvények (Transact-SQL)
sys.dm_exec_cached_plans (Transact-SQL)
sys.dm_exec_query_stats (Transact-SQL)
sys.dm_exec_requests (Transact-SQL)
sp_who (Transact-SQL)
Showplan logikai és fizikai operátorok hivatkozás
sys.dm_exec_text_query_plan (Transact-SQL)