Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
SQL-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