Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL 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).
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)