V SQL Server můžete použít SET SHOWPLAN_ALL
příkazu vrátit podrobné informace o tom, jak se příkaz T-SQL provádí, a také odhady požadavků na zdroje pro příkazy.
SHOWPLAN_ALL
vrací informace jako sadu řádků, které tvoří hierarchický strom představující kroky provedené procesorem dotazů SQL Server při provádění každého příkazu. Je to podobné jako SHOWPLAN_TEXT
, kromě SHOWPLAN_ALL
vrací podrobnější informace (a je určen pro použití s aplikacemi, které zvládnou jeho výstup).
Můžete nastavit SHOWPLAN_ALL
buď ON
nebo OFF
.
Když SHOWPLAN_ALL
je ON
, nebudou provedeny všechny následující příkazy T-SQL. Místo toho SQL Server vrátí informace o provedení příkazu (aniž by jej provedl).
Je důležité si uvědomit, že SHOWPLAN_ALL
poskytuje odhady požadavků na zdroje a že skutečné požadavky na zdroje se mohou lišit, když je příkaz ve skutečnosti proveden.
Příklad
Zde je příklad k demonstraci.
SET SHOWPLAN_ALL ON;
GO
SELECT * FROM Cats;
GO
Všimněte si, že SET SHOWPLAN_ALL
nelze zadat uvnitř uložené procedury a musí to být jediný příkaz v dávce.
Takto vypadá výsledek v Azure Data Studio:
A takto to vypadá v mssql-cli (rozhraní příkazového řádku) při použití vertikálního výstupu:
Commands completed successfully. -[ RECORD 1 ]------------------------- StmtText | SELECT * FROM Cats; StmtId | 1 NodeId | 1 Parent | 0 PhysicalOp | NULL LogicalOp | NULL Argument | 1 DefinedValues | NULL EstimateRows | 3 EstimateIO | NULL EstimateCPU | NULL AvgRowSize | NULL TotalSubtreeCost | 0.0032853 OutputList | NULL Warnings | NULL Type | SELECT Parallel | 0 EstimateExecutions | NULL -[ RECORD 2 ]------------------------- StmtText | |--Clustered Index Scan(OBJECT:([Test].[dbo].[Cats].[PK__Cats__6A1C8AFAB3EF1A8F])) StmtId | 1 NodeId | 2 Parent | 1 PhysicalOp | Clustered Index Scan LogicalOp | Clustered Index Scan Argument | OBJECT:([Test].[dbo].[Cats].[PK__Cats__6A1C8AFAB3EF1A8F]) DefinedValues | [Test].[dbo].[Cats].[CatId], [Test].[dbo].[Cats].[CatName] EstimateRows | 3 EstimateIO | 0.003125 EstimateCPU | 0.0001603 AvgRowSize | 142 TotalSubtreeCost | 0.0032853 OutputList | [Test].[dbo].[Cats].[CatId], [Test].[dbo].[Cats].[CatName] Warnings | NULL Type | PLAN_ROW Parallel | 0 EstimateExecutions | 1 (2 rows affected) Commands completed successfully.
Existuje mnoho sloupců, takže jsem zde použil vertikální výstup, aby se to lépe četlo.
Pokud by byl můj dotaz složitější, vrátilo by se více řádků.
Zde je příklad (trochu) složitějšího dotazu.
SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
Výsledek:
Jak to vypnout
Můžete jej vypnout pomocí SET SHOWPLAN_ALL OFF
.
Jakmile to uděláte, následující příkazy se provedou jako obvykle.
SET SHOWPLAN_ALL OFF;
GO
SELECT * FROM Cats;
GO
Výsledek:
Commands completed successfully. +---------+-----------+ | CatId | CatName | |---------+-----------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | +---------+-----------+ (3 rows affected) Commands completed successfully.
Zastaralé nebo ne?
Podle tohoto starého článku MSDN SET SHOWPLAN_ALL
je naplánováno ukončení podpory v budoucích verzích showplanu a je doporučeno použít SET SHOWPLAN_XML
místo toho.
Tento článek MSDN je však pro SQL Server 2008 R2, a když toto píšu, nezdá se, že by byl v SQL Server 2019 zastaralý. Ve skutečnosti se v aktuální dokumentaci o ukončení podpory vůbec nemluví a není zahrnuta. když spustím seznam zastaralých položek na serveru SQL.
Ať tak či onak, pravděpodobně se vyplatí na to pamatovat před použitím v budoucích verzích.
Grafický plán provádění
Pokud používáte grafický nástroj, jako je SSMS nebo Azure Data Studio, možná budete mít možnost zobrazit odhadovaný plán provádění grafického dotazu pro aktuální dotaz.
- V SSMS můžete použít Ctrl + L udělat toto. Nebo můžete kliknout na Zobrazit odhadovaný plán provedení nebo klikněte pravým tlačítkem v okně dotazu a vyberte Zobrazit plán odhadovaného provedení .
- V Azure Data Studio můžete kliknout na Vysvětlit tlačítko nad oknem dotazu.
Můžete také použít SET SHOWPLAN_XML ON
pro jeho aktivaci a SET SHOWPLAN_XML OFF
jej zakázat.