Sdílet prostřednictvím


NASTAV SHOWPLAN_ALL (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL databáze v Microsoft Fabric

Způsobuje, že Microsoft SQL Server nevykonává Transact-SQL příkazy. Místo toho SQL Server vrací podrobné informace o tom, jak by se příkazy vykonávaly (plán dotazů) a poskytuje odhady požadavků na zdroje pro příkazy a očekávané řádky (odhad kardinálity).

Transact-SQL konvence syntaxe

Syntaxe

  
SET SHOWPLAN_ALL { ON | OFF }  

Poznámky

Nastavení SET SHOWPLAN_ALL je nastaveno při spuštění nebo běhu a nikoli při parse.

Když SET SHOWPLAN_ALL je ZAPNUTO, SQL Server vrací informace o vykonání pro každý příkaz bez jeho spuštění a Transact-SQL příkazy se neprovedou. Po nastavení této možnosti ON se vrací informace o všech následujících Transact-SQL příkazech, dokud není tato možnost vypnuta. Například pokud je příkaz CREATE TABLE vykonán během SET SHOWPLAN_ALL ZAPNUTÉ, SQL Server vrátí chybovou zprávu z následného příkazu SELECT zahrnující stejnou tabulku, která uživatele informuje, že daná tabulka neexistuje. Následné odkazy na tuto tabulku proto selžou. Když je SET SHOWPLAN_ALL vypnutý, SQL Server spustí příkazy bez generování reportu.

SET SHOWPLAN_ALL je určen k použití aplikacemi napsanými tak, aby zvládly jeho výstup. Použijte SET SHOWPLAN_TEXT pro vrácení čitelného výstupu pro příkazové aplikace Microsoft Win32, jako je utilita osql .

SET SHOWPLAN_TEXT a SET SHOWPLAN_ALL nelze specifikovat v rámci uložené procedury; musí být jedinými výpisy v dávce.

SET SHOWPLAN_ALL vrací informace jako sadu řádků, které tvoří hierarchický strom reprezentující kroky, které SQL Server procesor dotazů provádí při provádění každého příkazu. Každý příkaz zobrazený ve výstupu obsahuje jeden řádek s textem příkazu, následovaný několika řádky s detaily výkonných kroků. Tabulka ukazuje sloupce, které výstup obsahuje.

Název sloupce Description
StmtText Pro řádky, které nejsou typu PLAN_ROW, tento sloupec obsahuje text Transact-SQL příkazu. Pro řádky typu PLAN_ROW tento sloupec obsahuje popis operace. Tento sloupec obsahuje fyzický operátor a může volitelně obsahovat i logický operátor. Tento sloupec může být také následován popisem, který určuje fyzický operátor. Pro více informací viz Showplan Logický a fyzikální operátor Reference.
StmtId Číslo výpisu v aktuální várce.
NodeId ID uzlu v aktuálním dotazu.
Rodič ID uzlu rodičovského kroku.
PhysicalOp Fyzikální implementační algoritmus pro uzel. Pouze pro řady typu PLAN_ROWS.
LogicalOp Relační algebraický operátor, který tento uzel reprezentuje. Pouze pro řady typu PLAN_ROWS.
argumentu Poskytuje doplňující informace o prováděné operaci. Obsah tohoto sloupce závisí na fyzickém operátoru.
DefinedValues Obsahuje seznam hodnot oddělených čárkami zavedený tímto operátorem. Tyto hodnoty mohou být vypočítané výrazy, které byly přítomny v aktuálním dotazu (například v seznamu SELECT nebo v klauzuli WHERE), nebo interní hodnoty zavedené procesorem dotazů za účelem zpracování tohoto dotazu. Tyto definované hodnoty mohou být následně odkazovány jinde v tomto dotazu. Pouze pro řady typu PLAN_ROWS.
EstimateRows Odhadovaný počet řádků výstupu vytvořených tímto operátorem. Pouze pro řady typu PLAN_ROWS.
EstimateIO Odhadované náklady na vstup/výstup* tohoto operátora. Pouze pro řady typu PLAN_ROWS.
EstimateCPU Odhadovaná cena CPU* pro tohoto operátora. Pouze pro řady typu PLAN_ROWS.
AvgRowSize Odhadovaná průměrná velikost řádku (v bajtech) řádku, který prochází tímto operátorem.
TotalSubtreeCost Odhadované (kumulativní) náklady* této operace a všech podřízených operací.
Výstupní seznam Obsahuje seznam sloupců oddělených čárkami, které aktuální operace promítá.
Warnings Obsahuje seznam varovných zpráv oddělených čárkami týkajících se aktuální operace. Varovné zprávy mohou obsahovat řetězec "NO STATS:()" s seznamem sloupců. Tato varovná zpráva znamená, že optimalizátor dotazů se pokusil rozhodnout na základě statistik pro tento sloupec, ale žádné nebyly k dispozici. Optimalizátor dotazů proto musel učinit odhad, což mohlo vést k výběru neefektivního plánu dotazů. Pro více informací o vytváření nebo aktualizaci sloupcových statistik (které pomáhají optimalizátoru dotazů vybrat efektivnější plán dotazů) viz AKTUALIZAČNÍ STATISTIKY. Tento sloupec může volitelně obsahovat řetězec "MISSING JOIN PREDICATE", což znamená, že join (zahrnující tabulky) probíhá bez predikátu spojování. Omylem vypuštění predikátu join může vést k dotazu, který trvá mnohem déle, než se očekávalo, a vrátí obrovskou množinu výsledků. Pokud je toto varování přítomno, ověřte, že absence predikátu pro spojení je záměrná.
Type Typ uzlu. Pro rodičovský uzel každého dotazu je to typ příkazu Transact-SQL (například SELECT, INSERT, EXECUTE a podobně). Pro poduzly představující plány provádění je typ PLAN_ROW.
Paralelní 0 = Operátor neběží paralelně.

1 = Operátor běží paralelně.
Odhad provedení Odhadovaný početkrát, kdy bude tento operátor vykonán během aktuálního dotazu.

*Nákladové jednotky jsou založeny na interním měření času, nikoli na hodinách na stěně. Používají se k určení relativních nákladů plánu ve srovnání s jinými plány.

Povolení

Pro použití SET SHOWPLAN_ALL musíte mít dostatečná oprávnění k provádění příkazů, na kterých se SET SHOWPLAN_ALL vykonává, a musíte mít SHOWPLAN oprávnění pro všechny databáze obsahující odkazované objekty.

Pro příkazy SELECT, INSERT, UPDATE, DELETE , EXEC stored_procedure a EXEC user_defined_function musí uživatel vytvořit Showplan:

  • Mít příslušná oprávnění ke spuštění příkazů Transact-SQL.

  • Mít oprávnění SHOWPLAN pro všechny databáze obsahující objekty odkazované příkazy Transact-SQL, jako jsou tabulky, zobrazení atd.

Pro všechny ostatní příkazy, jako DDL, USE database_name, SET, DECLARE, dynamic SQL a podobně, jsou potřeba pouze příslušná oprávnění k vykonání Transact-SQL příkazů.

Examples

Následující dvě tvrzení využívají nastavení SET SHOWPLAN_ALL k ukázání, jak SQL Server analyzuje a optimalizuje využití indexů v dotazech.

První dotaz používá srovnávací operátor Equals (=) v klauzuli WHERE na indexovaném sloupci. To vede k hodnotě Clustered Index Seek ve sloupci LogicalOp a názvu indexu ve sloupci Argument .

Druhý dotaz používá operátor LIKE v klauzuli WHERE. To nutí SQL Server použít shlukový indexový sken a najít data, která splňují podmínku klauzule WHERE. To vede k hodnotě Clustered Index Scan ve sloupci LogicalOp s názvem indexu ve sloupci Argument a hodnotě Filter ve sloupci LogicalOp s podmínkou klauzule WHERE ve sloupci Argument .

Hodnoty ve sloupcích EstimateRows a TotalSubtreeCost jsou menší pro první indexovaný dotaz, což naznačuje, že je zpracován mnohem rychleji a spotřebovává méně zdrojů než neindexovaný dotaz.

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  

Viz také

Příkazy SET (Transact-SQL)
NASTAV SHOWPLAN_TEXT (Transact-SQL)
NASTAV SHOWPLAN_XML (Transact-SQL)