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


sys.dm_exec_text_query_plan (Transact-SQL)

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

A Showplan-t szöveges formátumban adja vissza egy Transact-SQL tételhez vagy egy adott utasításhoz a batchben. A terv fogantyúja által meghatározott lekérdezési terv gyorsítótárban vagy éppen futóban van. Ez a táblázatértékű függvény hasonló a sys.dm_exec_query_plan (Transact-SQL)-hoz, de a következő különbségekkel rendelkezik:

  • A lekérdezési terv kimenete szöveges formátumban jelenik meg.
  • A lekérdezési terv kimenete nem korlátozott méretű.
  • A tételen belül egyéni kijelentések is meghatározhatók.

Érvényes: SQL Server (SQL Server 2008 (10.0.x) és újabbabb), Azure SQL Database.

Transact-SQL szintaxis konvenciók

Szemantika

sys.dm_exec_text_query_plan   
(   
    plan_handle   
    , { statement_start_offset | 0 | DEFAULT }  
        , { statement_end_offset | -1 | DEFAULT }  
)  

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:

statement_start_offset | 0 | ALAPÉRTELMEZETT
Ájtokban megmutatja a lekérdezés kezdőpozícióját, amelyet a sor leír a tétel vagy a tartós objektum szövegében. statement_start_offsetint. 0 érték jelzi a tétel kezdetét. Az alapértelmezett érték 0.

Az utasítás kezdő eloszlása a következő dinamikus menedzsment objektumokból származik:

statement_end_offset | -1 | ALAPÉRTELMEZETT
Bájtokban megmutatja a lekérdezés végpozícióját, amelyet a sor leír a tétel vagy a megmaradt objektum szövegében.

statement_start_offsetint.

Egy -1 érték jelzi a tétel végét. Az alapértelmezett érték -1.

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 nvarchar(max) 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 szöveges formátumban van. 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 tervoszlopábannem jelenik meg Showplan kimenet sys.dm_exec_text_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 a feltétel akkor jelentkezhet, ha időbeli késés van a terv fogantyújának rögzítése és a sys.dm_exec_text_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ó showtervek nem lehet sys.dm_exec_text_query_plan használatával visszanyerni, mivel 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ényt vagy 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_text_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 a sys.dm_exec_text_query_plan-re arra a plan_handle-re , amely megfelel a felhasználó által definiált függvénynek.

Ha egy ad hoc lekérdezés egyszerű vagy kényszerített paraméterezést alkalmaz, az 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_text_query_plan-t a felkészített paraméterezett lekérdezés tervkezelő címére. 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.

Permissions

A sys.dm_exec_text_query_plan végrehajtásához a felhasználónak tagnak kell lennie a rendszergazdálkodó fix szerver szerepének, vagy rendelkeznie kell a szerver VIEW SERVER STATE jogával.

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

A. A gyorsítótározott lekérdezési terv lekérése egy lassan futó 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 a 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 kezelő .0x06000100A27E7C1FA821B10600 A következő példa a megadott terv kezelő lekérdezési tervet adja vissza, és az alapértelmezett 0 és -1 értékeket használja a lekérdezés vagy batch összes állításának visszaadásához.

USE master;  
GO  
SELECT query_plan   
FROM sys.dm_exec_text_query_plan (0x06000100A27E7C1FA821B10600,0,-1);  
GO  

B. Minden lekérdezési terve lekérése 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_text_query_plan a következőkben. A 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_text_query_plan(cp.plan_handle, DEFAULT, DEFAULT);  
GO  

C. Minden lekérdezési terve lekérése, amelyhez a szerver lekérdezett statisztikát 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_text_query_plan a következőkben. Minden terv Showplan kimenete 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_text_query_plan(qs.plan_handle, qs.statement_start_offset, qs.statement_end_offset);  
GO  

D. Az öt legfontosabb lekérdezés információinak lekérdezése az átlagos CPU idő szerint

A következő példa adja vissza a lekérdezési terveket és az átlagos CPU időt az öt legfontosabb lekérdezés esetén. A sys.dm_exec_text_query_plan függvény megadja az alapértelmezett értékeket, 0 és -1, hogy visszaadja a lekérdezési terv összes tételét a csomagban.

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_text_query_plan(qs.plan_handle, 0, -1)  
ORDER BY total_worker_time/execution_count DESC;  
GO  

Lásd még:

sys.dm_exec_query_plan (Transact-SQL)