W SQL Server możesz użyć SET SHOWPLAN_ALL
instrukcja, aby zwrócić szczegółowe informacje o tym, jak instrukcja T-SQL jest wykonywana, a także szacunkowe wymagania dotyczące zasobów dla instrukcji.
SHOWPLAN_ALL
zwraca informacje jako zestaw wierszy, które tworzą hierarchiczne drzewo reprezentujące kroki podejmowane przez procesor zapytań SQL Server podczas wykonywania każdej instrukcji. Jest podobny do SHOWPLAN_TEXT
, z wyjątkiem tego, że SHOWPLAN_ALL
zwraca bardziej szczegółowe informacje (i jest przeznaczone do użycia z aplikacjami, które mogą obsłużyć jego dane wyjściowe).
Możesz ustawić SHOWPLAN_ALL
na ON
lub OFF
.
Kiedy SHOWPLAN_ALL
jest ON
, wszystkie kolejne instrukcje T-SQL nie są wykonywane. Zamiast tego SQL Server zwraca informacje o wykonaniu instrukcji (bez jej wykonywania).
Należy pamiętać, że SHOWPLAN_ALL
dostarcza szacunki wymagań dotyczących zasobów, a rzeczywiste wymagania dotyczące zasobów mogą się różnić, gdy instrukcja jest faktycznie wykonywana.
Przykład
Oto przykład do zademonstrowania.
SET SHOWPLAN_ALL ON;
GO
SELECT * FROM Cats;
GO
Zwróć uwagę, że SET SHOWPLAN_ALL
nie można określić wewnątrz procedury składowanej i musi to być jedyna instrukcja w partii.
Oto, jak wygląda wynik w Azure Data Studio:
A oto jak to wygląda w mssql-cli (interfejsie wiersza poleceń) przy użyciu wyjścia pionowego:
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.
Jest wiele kolumn, więc użyłem tutaj pionowego wyjścia, aby ułatwić czytanie.
Gdyby moje zapytanie było bardziej złożone, zostałoby zwróconych więcej wierszy.
Oto przykład (nieco) bardziej złożonego zapytania.
SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
Wynik:
Jak to wyłączyć
Możesz go wyłączyć, używając SET SHOWPLAN_ALL OFF
.
Gdy to zrobisz, kolejne instrukcje będą wykonywane normalnie.
SET SHOWPLAN_ALL OFF;
GO
SELECT * FROM Cats;
GO
Wynik:
Commands completed successfully. +---------+-----------+ | CatId | CatName | |---------+-----------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | +---------+-----------+ (3 rows affected) Commands completed successfully.
Przestarzałe czy nie?
Zgodnie z tym starym artykułem MSDN, SET SHOWPLAN_ALL
jest zaplanowane do wycofania w przyszłych wersjach showplanu i zaleca się użycie SET SHOWPLAN_XML
zamiast tego.
Jednak ten artykuł MSDN dotyczy SQL Server 2008 R2 i kiedy to piszę, wydaje się, że nie został przestarzały w SQL Server 2019. W rzeczywistości aktualna dokumentacja nie wspomina o przestarzałości i nie jest uwzględniona kiedy uruchamiam listę przestarzałych pozycji w SQL Server.
Tak czy inaczej, prawdopodobnie warto mieć to na uwadze przed użyciem go w przyszłych wydaniach.
Graficzny plan wykonania
Jeśli używasz narzędzia graficznego, takiego jak SSMS lub Azure Data Studio, możesz mieć możliwość wyświetlenia szacowanego graficznego planu wykonania zapytania dla bieżącego zapytania.
- W SSMS możesz użyć Ctrl + L aby to zrobić. Możesz też kliknąć Wyświetl szacunkowy plan wykonania lub kliknij prawym przyciskiem myszy w oknie zapytania i wybierz Wyświetl szacunkowy plan wykonania .
- W Azure Data Studio możesz kliknąć Wyjaśnij przycisk nad oknem zapytania.
Możesz także użyć SET SHOWPLAN_XML ON
aby go włączyć, i SET SHOWPLAN_XML OFF
aby go wyłączyć.