Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SHOWPLAN_ALL serwera SQL

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ć.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak używać PHP do łączenia się z serwerem sql

  2. Jak wstawić JSON do tabeli w SQL Server

  3. Rozwiązywanie problemów z wydajnością procesora SQL Server

  4. Dlaczego moje lewe złącze t-sql nie działa?

  5. pyodbc.connect() działa, ale nie sqlalchemy.create_engine().connect()