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


SET SHOWPLAN_ALL (Transact-SQL)

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

Ez okozza, hogy a Microsoft SQL Server nem hajt végre Transact-SQL utasításokat. Ehelyett az SQL Server részletes információkat ad arról, hogyan hajtják végre az utasításokat (lekérdezési terv), és becslést ad az utasítások és várható sorok erőforrás-követelményeiről (kardinalitásbecslés).

Transact-SQL szintaxis konvenciók

Szemantika

  
SET SHOWPLAN_ALL { ON | OFF }  

Megjegyzések

A SET SHOWPLAN_ALL beállítása végrehajtási vagy futási időre van beállítva, nem parse időben.

Amikor SET SHOWPLAN_ALL ON, az SQL Server minden utasításhoz végrehajtási adatokat ad vissza anélkül, hogy végrehajtaná, és Transact-SQL utasítások nem kerülnek le. Miután ezt az opciót bekapcsolják, az összes további Transact-SQL állításról visszaküldött információ, amíg az opció ki nem kapcsolódik. Például, ha egy CREATE TABLE utasítást futtatnak, miközben SET SHOWPLAN_ALL BEKAPCSOLVA van, az SQL Server hibáüzenetet ad vissza egy későbbi SELECT utasításból, amely ugyanazt a táblát érinti, és tájékoztatja a felhasználókat, hogy a megadott tábla nem létezik. Ezért a tábla későbbi hivatkozásai sikertelenek. Amikor a SET SHOWPLAN_ALL KIKAPCSOLVA, az SQL Server a jelentés létrehozása nélkül hajtja végre az utasításokat.

SET SHOWPLAN_ALL arra szolgál, hogy az adott kimenetet kezelő alkalmazások használják. Használd a SET SHOWPLAN_TEXT-t a Microsoft Win32 parancssoros alkalmazások, például az osql segédprogram olvasható kimenetének visszaadásához.

A SET SHOWPLAN_TEXT és a SET SHOWPLAN_ALL nem lehet megjelölni egy tárolt eljárásban; Ezeknek kell lenniük az egyetlen állítások egy adagban.

A SET SHOWPLAN_ALL az adatokat sorokból álló halmazként adja vissza, amelyek hierarchikus fát alkotnak, és az SQL Server lekérdezésfeldolgozó által végrehajtott lépéseket jelképezik, amikor végrehajtja az egyes utasításokat. Minden kimenetben megjelenő utasítás egyetlen sort tartalmaz az utasítás szövegével, majd több sort követ a végrehajtási lépések részleteivel. A táblázat mutatja azokat az oszlopokat, amelyeket a kimenet tartalmaz.

Oszlop név Description
StmtText Az PLAN_ROW típustól eltérő sorok esetén ez az oszlop tartalmazza a Transact-SQL állítás szövegét. Az PLAN_ROW típusú sorok esetében ez az oszlop tartalmazza a művelet leírását. Ez az oszlop tartalmazza a fizikai operátort, és opcionálisan tartalmazhatja a logikai operátort is. Ezt az oszlopot egy olyan leírás is követheti, amelyet a fizikai operátor határoz meg. További információért lásd: Showplan logikai és fizikai operátorok hivatkozása.
StmtId A jelenlegi tétel száma.
NodeId A csomópont azonosítója a jelenlegi lekérdezésben.
Szülő A szülő lépés csomópontazonosítója.
PhysicalOp Fizikai megvalósítási algoritmus a csomóponthoz. Csak a PLAN_ROWS típusú sorokra.
LogicalOp Ez a csomópont képviseli a relációs algebrai operátort. Csak a PLAN_ROWS típusú sorokra.
érv Kiegészítő információkat nyújt a végrehajtandó műveletről. Ennek az oszlopnak a tartalma a fizikai operátortól függ.
DefinedValues Tartalmaz egy vesszővel elválasztott értéklistát az operátor által bevezetett értékekről. Ezek az értékek lehetnek olyan kiszámított kifejezések, amelyek jelen voltak a jelenlegi lekérdezésben (például a SELECT listában vagy a WHERE klauzulában), vagy a lekérdezésfeldolgozó által bevezetett belső értékek a lekérdezés feldolgozásához. Ezeket a definiált értékeket ezután máshol is hivatkozhatnak a lekérdezés keretében. Csak a PLAN_ROWS típusú sorokra.
EstimateRows Az operátor által előállított kibocsátássorok becsült száma. Csak a PLAN_ROWS típusú sorokra.
EstimateIO Becsült I/O költség* ennek az operátornak. Csak a PLAN_ROWS típusú sorokra.
EstimateCPU Becsült CPU költség* ennek az operátornak. Csak a PLAN_ROWS típusú sorokra.
AvgRowSize A sor, amelyet ezen az operátoron keresztül továbbítanak a sor, becsült átlagos méret (bájtokban).
TotalSubtreeCost Ennek az üzemeltetésnek és az összes gyermekműtétnek becsült (összesített) költsége.
OutputList Tartalmaz egy vesszővel elválasztott listát az aktuális művelet által vetített oszlopokról.
Warnings Tartalmaz egy vesszővel elválasztott figyelmeztető üzenetlistát a jelenlegi művelethez. A figyelmeztető üzenetek tartalmazhatják a "NO STATS:()" sort oszloplistával. Ez a figyelmeztető üzenet azt jelenti, hogy a lekérdezésoptimalizáló megpróbált döntést hozni az oszlop statisztikái alapján, de egyik sem volt elérhető. Ennek következtében a lekérdezésoptimalizálónak tippet kellett tennie, ami akár egy hatástalan lekérdezési terv kiválasztásához vezethetett. További információért az oszlopstatisztikák létrehozásáról vagy frissítéséről (amelyek segítenek a lekérdezésoptimalizálónak hatékonyabb lekérdezési tervet választani), lásd a STATISZTIKÁK FRISSÍTÉSÉT. Ez az oszlop opcionálisan tartalmazhatja a "MISSING JOIN PREDICATE" stringet, ami azt jelenti, hogy egy csatlakozás (táblákat érintve) összekapcsoló predikátum nélkül történik. Ha véletlenül eldobunk egy csatlakozási predikátumot, olyan lekérdezést eredményezhet, amely sokkal tovább tart a vártnál, és hatalmas eredményhalmazt ad vissza. Ha ez a figyelmeztetés jelen van, ellenőrizd, hogy az egyesítési predikátum hiánya szándékos-e.
Type Csomópont típus. Minden lekérdezés szülőcsomópontjánál ez a Transact-SQL állítástípus (például SELECT, INSERT, EXECUTE, stb.). A végrehajtó terveket képviselő alcsomópontok esetében a típus PLAN_ROW.
Párhuzamos 0 = Az operátor nem párhuzamosan fut.

1 = Az operátor párhuzamosan fut.
BecslésVégrehajtások Becsült hányszor hajtják végre ezt az operátort a jelenlegi lekérdezés futtatása közben.

*A költségegységek belső időmérésen alapulnak, nem falóra-időn. Ezeket arra használják, hogy meghatározzák a terv relatív költségét más tervekhez képest.

Permissions

A SET SHOWPLAN_ALL használatához elegendő jogosultsággal kell rendelkezned ahhoz, hogy végrehajtsd azokat a állításokat, amelyeken a SET SHOWPLAN_ALL le van hajtva, és SHOWPLAN engedélyt kell szerezned minden hivatkozási objektumot tartalmazó adatbázishoz.

A SELECT, INSERT, UPDATE, DELETE, EXEC stored_procedure és EXEC user_defined_function utasításokhoz a Showplan elkészítéséhez a felhasználónak:

  • Rendelkezik a megfelelő engedélyekkel a Transact-SQL utasítások végrehajtásához.

  • RENDELKEZik SHOWPLAN-engedéllyel minden olyan adatbázisra, amely a Transact-SQL utasítások által hivatkozott objektumokat tartalmaz, például táblákat, nézeteket stb.

Minden más utasításnál, mint például a DDL, USE database_name, SET, DECLARE, dinamikus SQL és így tovább, csak a megfelelő jogosultságokra van szükség a Transact-SQL utasítások végrehajtásához.

Példák

A következő két állítás a SET SHOWPLAN_ALL beállításokat használja arra, hogy bemutassa, hogyan elemzi és optimalizálja az SQL Server az indexek lekérdezésekben történő használatát.

Az első lekérdezés az Equals összehasonlító operátort (=) használja a WHERE klauzulájában egy indexelt oszlopon. Ez a LogicalOp oszlopban található a Clustered Index Seek értéket, az Argumentum oszlopban pedig az index nevét eredményezi.

A második lekérdezés a WHERE záradék LIKE operátorát használja. Ez arra kényszeríti az SQL Servert, hogy klaszterezett indexszkennelést alkalmazzon, és megtalálja azokat az adatokat, amelyek megfelelnek a WHERE záradék feltételének. Ez a LogicalOp oszlopban található Clustered Index Scan értéket eredményez, az index neve az Argument oszlopban, a Filter érték pedig a LogicalOp oszlopban, a WHERE klauzula feltétele pedig az Argument oszlopban.

Az EstimateSorok és a TotalSubtreeCost oszlopok értékei kisebbek az első indexelt lekérdezés esetében, ami azt jelzi, hogy az sokkal gyorsabban dolgozzák fel és kevesebb erőforrást használ, mint a nem indexelt lekérdezés.

USE AdventureWorks2022;  
GO  
SET SHOWPLAN_ALL ON;  
GO  
-- First query.  
SELECT BusinessEntityID   
FROM HumanResources.Employee  
WHERE NationalIDNumber = '509647174';  
GO  
-- Second query.  
SELECT BusinessEntityID, EmergencyContactID   
FROM HumanResources.Employee  
WHERE EmergencyContactID LIKE '1%';  
GO  
SET SHOWPLAN_ALL OFF;  
GO  

Lásd még:

SET-utasítások (Transact-SQL)
SET SHOWPLAN_TEXT (Transact-SQL)
SETT SHOWPLAN_XML (Transact-SQL)