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

Jak SHOWPLAN_XML działa w SQL Server

W SQL Server możesz użyć SET SHOWPLAN_XML instrukcja zwracająca szczegółowe informacje o tym, jak zostanie wykonana instrukcja T-SQL, w postaci dobrze zdefiniowanego dokumentu XML.

Jest podobny do SHOWPLAN_ALL , z wyjątkiem tego, że SHOWPLAN_ALL zwraca swój zestaw danych wierszy, które tworzą drzewo hierarchiczne.

Możesz ustawić SHOWPLAN_XML na ON lub OFF .

Kiedy SHOWPLAN_XML jest ON , wszystkie kolejne instrukcje T-SQL nie są wykonywane. Zamiast tego SQL Server zwraca informacje o wykonaniu instrukcji (bez jej wykonywania).

Przykład

Oto przykład do zademonstrowania.

SET SHOWPLAN_XML ON;
GO

SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
GO

Zwróć uwagę, że SET SHOWPLAN_XML nie można określić wewnątrz procedury składowanej i musi to być jedyna instrukcja w partii.

Otrzymany wynik może zależeć od narzędzia, którego używasz do uzyskania dostępu do SQL Server.

Kiedy uruchamiam to w Azure Data Studio, mogę klikać różne karty, aby uzyskać inny widok wyniku.

Wyniki zakładka wyświetla nieprzetworzony ciąg XML:

Kliknięcie wiersza otwiera dokument XML w nowej karcie:

Plan zapytań zakładka wyświetla graficzną reprezentację wyniku:

Najważniejsze operacje zakładka przedstawia dane w formacie tabelarycznym, który umożliwia sortowanie danych według różnych metryk:

Nie działa?

Jeśli to nie zadziała, upewnij się, że Dołącz rzeczywisty plan wykonania nie jest wybrany w SSMS. Po wybraniu SET SHOWPLAN_XML ON nie generuje danych wyjściowych XML Showplan.

Jak to wyłączyć

Możesz go wyłączyć za pomocą SET SHOWPLAN_XML OFF .

Gdy to zrobisz, kolejne instrukcje będą wykonywane normalnie.

SET SHOWPLAN_XML OFF;
GO

SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
GO

Wynik:

Commands completed successfully.
+---------+-----------+---------+-----------+-----------+
| CatId   | CatName   | DogId   | DogName   | GoodDog   |
|---------+-----------+---------+-----------+-----------|
| 2       | Fluffy    | 2       | Fluffy    | 0         |
+---------+-----------+---------+-----------+-----------+
(1 row affected)
Commands completed successfully.

Plan wykonania w GUI

Jeśli używasz narzędzia graficznego, takiego jak SSMS lub Azure Data Studio, możesz mieć opcję skrótu do przeglądania szacowanego graficznego planu wykonania zapytania. Umożliwia to przeglądanie planu zapytania bez konieczności uruchamiania SET SHOWPLAN_XML ON .

Aby uruchomić szacunkowy plan zapytań:

  • 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 . Dzięki temu nie będziesz musiał zmieniać SHOWPLAN_XML włączać i wyłączać w kodzie.
  • W Azure Data Studio możesz kliknąć Wyjaśnij przycisk nad oknem zapytania.

Możesz także uruchomić rzeczywisty plan zapytań:

  • W SSMS, w zapytaniu menu kliknij Dołącz rzeczywisty plan wykonania lub kliknij Uwzględnij rzeczywisty plan wykonania przycisk paska narzędzi.
  • W Azure Data Studio przejdź do Widok> Paleta poleceń i wpisz Uruchom bieżące zapytanie z rzeczywistym planem .

Pamiętaj, że jeśli Uwzględnij rzeczywisty plan wykonania jest wybrany w SSMS, SET SHOWPLAN_XML ON opcja nie generuje danych wyjściowych XML Showplan. Spróbuj wyczyścić Uwzględnij rzeczywisty plan wykonania przycisk przed użyciem tego SET opcja.

Jednak uważam, że Azure Data Studio działa odwrotnie SHOWPLAN_XML ON wydaje się zastępować Uruchom bieżące zapytanie z rzeczywistym planem opcja, chyba że uruchomię Wyjaśnij pierwszy (szacowany plan zapytania), po którym Uruchom bieżące zapytanie z rzeczywistym planem nagle działa (Rzeczywiste wiersze i Rzeczywiste egzekucje kolumny Najważniejszych operacji zakładka zwraca odpowiednie dane).

Prawdopodobnie najlepiej jest wyłączyć opcję XML Showplan przed użyciem innych metod pobierania planu zapytań.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Procedura składowana wywołań SQL dla każdego wiersza bez użycia kursora

  2. Jak utworzyć pole logiczne tak/nie na serwerze SQL?

  3. Jak mogę wstawić 10 milionów rekordów w najkrótszym możliwym czasie?

  4. 13 najlepszych praktyk w zakresie bezpieczeństwa SQL Server

  5. Co naprawdę robi metoda Statement.setFetchSize(nSize) w sterowniku SQL Server JDBC?