SET SHOWPLAN_XML (Transact-SQL)
Dotyczy:sql Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics (tylko dedykowana pula SQL)
punktu końcowego analizy SQL w usłudze Microsoft Fabric
Warehouse w usłudze Microsoft Fabric
Powoduje, że program SQL Server nie wykonuje instrukcji Transact-SQL. Zamiast tego program SQL Server zwraca szczegółowe informacje o sposobie wykonywania instrukcji w postaci dobrze zdefiniowanego dokumentu XML.
W usłudze Fabric Data Warehouse i punkcie końcowym analizy SQL set SHOWPLAN_XML jest funkcją w wersji zapoznawczej.
Transact-SQL konwencje składni
Składnia
SET SHOWPLAN_XML { ON | OFF }
Uwagi
Ustawienie set SHOWPLAN_XML jest ustawione w czasie wykonywania lub wykonywania, a nie w czasie analizy.
Gdy ustawienie SET SHOWPLAN_XML jest włączone, program SQL Server zwraca informacje o planie wykonywania dla każdej instrukcji bez jej wykonywania, a instrukcje Transact-SQL nie są wykonywane. Po ustawieniu tej opcji włączone informacje o planie wykonywania dotyczące wszystkich kolejnych instrukcji Transact-SQL są zwracane do momentu ustawienia opcji WYŁĄCZONE. Jeśli na przykład instrukcja CREATE TABLE jest wykonywana podczas ustawiania SHOWPLAN_XML jest włączona, program SQL Server zwraca komunikat o błędzie z kolejnej instrukcji SELECT obejmującej tę samą tabelę; określona tabela nie istnieje. W związku z tym kolejne odwołania do tej tabeli kończą się niepowodzeniem. Gdy SHOWPLAN_XML SET jest wyłączona, program SQL Server wykonuje instrukcje bez generowania raportu.
ZESTAW SHOWPLAN_XML ma zwracać dane wyjściowe jako nvarchar(max) dla aplikacji, takich jak sqlcmd, gdzie dane wyjściowe XML są następnie używane przez inne narzędzia do wyświetlania i przetwarzania informacji o planie zapytania.
Nuta
Dynamiczny widok zarządzania, sys.dm_exec_query_plan
, zwraca te same informacje co SET SHOWPLAN XML w xml typu danych. Te informacje są zwracane z kolumny query_plan
sys.dm_exec_query_plan
. Aby uzyskać więcej informacji, zobacz sys.dm_exec_query_plan (Transact-SQL).
Nie można określić zestawu SHOWPLAN_XML wewnątrz procedury składowanej. Musi być jedyną instrukcją w partii.
Zestaw SHOWPLAN_XML zwraca informacje jako zestaw dokumentów XML. Każda partia po instrukcji SET SHOWPLAN_XML ON jest odzwierciedlana w danych wyjściowych przez pojedynczy dokument. Każdy dokument zawiera tekst instrukcji w partii, a następnie szczegóły kroków wykonywania. W dokumencie przedstawiono szacowane koszty, liczbę wierszy, indeksy, do których uzyskuje się dostęp, oraz typy operatorów wykonywanych, kolejność sprzężenia i więcej informacji o planach wykonania.
Nuta
Jeśli w programie SQL Server Management Studio wybrano Uwzględnij rzeczywisty plan wykonania, ta opcja SET nie generuje danych wyjściowych programu Showplan XML. Wyczyść przycisk Uwzględnij rzeczywisty plan wykonania przed użyciem tej opcji SET.
Szacowane plany wykonywania za pośrednictwem programu SSMS i SET SHOWPLAN_XML są dostępne dla dedykowanych pul SQL (dawniej SQL DW) i dedykowanych pul SQL w usłudze Azure Synapse Analytics. Aby pobrać rzeczywisty plan wykonywania dla dedykowanych pul SQL (dawniej SQL DW) i dedykowanych pul SQL w usłudze Azure Synapse Analytics, istnieją różne polecenia. Aby uzyskać więcej informacji, zobacz Monitorowanie obciążenia dedykowanej puli SQL usługi Azure Synapse Analytics przy użyciu widoków DMV.
Lokalizacja danych wyjściowych SHOWPLAN
Dokument zawierający schemat XML dla danych wyjściowych XML przez zestaw SHOWPLAN_XML jest kopiowany podczas instalacji do katalogu lokalnego na komputerze, na którym jest zainstalowany program Microsoft SQL Server. Dokument można znaleźć na dysku zawierającym pliki instalacyjne programu SQL Server w ścieżce podobnej do następującej:
\Microsoft SQL Server\130\Tools\Binn\schemas\sqlserver\2004\07\showplan\showplanxml.xsd
W poprzedniej ścieżce węzeł 130\
jest używany przez program SQL Server 2016. Liczba 130 pochodzi z pierwszego węzła wartości zwracanej przez SELECT @@VERSION
, czyli 13. W przypadku programu SQL Server 2017 ścieżka będzie używać 140\
, ponieważ pierwszy węzeł jego wartości @@VERSION
wynosi 14. Program SQL Server 2019 pierwszą wartością z @@VERSION
jest 15. Program SQL Server 2022 pierwszą wartością z @@VERSION
jest 16.
Schemat programu Showplan można również znaleźć w Schematy XML programu Microsoft SQL Server.
Uprawnienia
Aby można było używać SHOWPLAN_XML SET, musisz mieć wystarczające uprawnienia do wykonywania instrukcji, na których jest wykonywana SHOWPLAN_XML SET, i musisz mieć uprawnienie SHOWPLAN dla wszystkich baz danych zawierających obiekty, do których odwołuje się odwołanie.
W przypadku instrukcji SELECT
, INSERT
, UPDATE
, DELETE
, EXEC *stored_procedure*
i EXEC *user_defined_function*
w celu utworzenia programu Showplan użytkownik musi:
Mieć odpowiednie uprawnienia do wykonywania instrukcji Transact-SQL.
Uprawnienie SHOWPLAN do wszystkich baz danych zawierających obiekty, do których odwołuje się instrukcje Transact-SQL, takie jak tabele, widoki itd.
W przypadku wszystkich innych instrukcji, takich jak DDL, USE *database_name*
, SET
, DECLARE
, dynamiczny język SQL itd., potrzebne są tylko odpowiednie uprawnienia do wykonywania instrukcji Transact-SQL.
Przykłady
Dwie instrukcje, które korzystają z ustawień set SHOWPLAN_XML, aby pokazać sposób analizowania i optymalizowania użycia indeksów w zapytaniach przez program SQL Server.
Pierwsze zapytanie używa operatora porównania Equals (=
) w klauzuli WHERE w kolumnie indeksowanej. Drugie zapytanie używa operatora LIKE w klauzuli WHERE. Spowoduje to, że program SQL Server będzie używał skanowania indeksu klastrowanego i znajdowania danych spełniających warunek klauzuli WHERE. Wartości w EstimateRows
i atrybuty EstimatedTotalSubtreeCost
są mniejsze dla pierwszego indeksowanego zapytania, co oznacza, że jest przetwarzane znacznie szybciej i używa mniej zasobów niż zapytanie nieindeksowane.
USE AdventureWorks2022;
GO
SET SHOWPLAN_XML ON;
GO
-- First query.
SELECT BusinessEntityID
FROM HumanResources.Employee
WHERE NationalIDNumber = '509647174';
GO
-- Second query.
SELECT BusinessEntityID, JobTitle
FROM HumanResources.Employee
WHERE JobTitle LIKE 'Production%';
GO
SET SHOWPLAN_XML OFF;