Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Baza danych SQL w Microsoft Fabric
Funkcja sys.dm_exec_query_plan dynamicznego zarządzania zwraca Showplan w formacie XML dla partii określonej przez uchwyt planu. Plan określony przez uchwyt planu może być albo buforowany, albo obecnie wykonywany.
Schemat XML dla Showplanu jest opublikowany i dostępny na tej stronie Microsoft. Jest również dostępny w katalogu, w którym zainstalowany jest SQL Server.
Transact-SQL konwencje składni
Składnia
sys.dm_exec_query_plan(plan_handle)
Arguments
plan_handle
Token, który jednoznacznie identyfikuje plan wykonywania zapytania dla partii, która została wykonana, a jego plan znajduje się w pamięci podręcznej planu lub jest obecnie wykonywany.
plan_handlejest warbinary(64).
Można uzyskać z plan_handle następujących dynamicznych obiektów zarządzania:
Zwracana tabela
| Nazwa kolumny | Typ danych | Opis |
|---|---|---|
dbid |
smallint | Identyfikator bazy danych kontekstu, która obowiązywała, gdy skompilowano instrukcję Transact-SQL odpowiadającą temu planowi. W przypadku instrukcji ad hoc i przygotowanych sql identyfikator bazy danych, w której skompilowano instrukcje. Kolumna jest dopuszczana do wartości null. |
objectid |
int | Identyfikator obiektu (na przykład procedura składowana lub funkcja zdefiniowana przez użytkownika) dla tego planu zapytania. Dla ad hoc i przygotowanych partii, ta kolumna to NULL.Kolumna jest dopuszczana do wartości null. |
number |
smallint | Liczba całkowita ponumerowanej procedury składowanej. Na przykład grupa procedur dla aplikacji rozkazów może nosić nazwę orderproc;1, orderproc;2, i tak dalej. Dla ad hoc i przygotowanych partii, ta kolumna to NULL.Kolumna jest dopuszczana do wartości null. |
encrypted |
bit | Wskazuje, czy odpowiednia procedura składowana jest szyfrowana. 0 = niezaszyfrowane 1 = zaszyfrowane Kolumna nie jest unieważniona. |
query_plan |
xml | Zawiera reprezentację Showplan w czasie kompilacji planu wykonania zapytań określoną za pomocą plan_handle. Program Showplan ma format XML. Jeden plan jest generowany dla każdej partii zawierającej na przykład instrukcje ad hoc Transact-SQL, wywołania procedury składowanej i wywołania funkcji zdefiniowane przez użytkownika.Kolumna jest dopuszczana do wartości null. |
Uwagi
W następujących warunkach żadne dane wyjściowe programu Showplan nie są zwracane w query_plan kolumnie zwracanej tabeli dla sys.dm_exec_query_planelementu :
Jeśli plan zapytań określony przez using
plan_handlezostał usunięty z pamięci podręcznej planu, kolumnaquery_planzwróconej tabeli toNULL. Na przykład taki warunek może wystąpić, jeśli istnieje opóźnienie czasowe między momentem przechwycenia uchwytu planu a jego użyciem zsys.dm_exec_query_planNiektóre instrukcje Transact-SQL nie są buforowane, takie jak instrukcje operacji zbiorczych lub zawierające literale ciągów o rozmiarze większym niż 8 KB. Plany XML dla takich instrukcji nie mogą być pobrane przez użycie
sys.dm_exec_query_plan, chyba że partia jest obecnie wykonywana, ponieważ nie istnieją w pamięci podręcznej.Jeśli procedura wsadowa lub przechowywana Transact-SQL zawiera wywołanie funkcji zdefiniowanej przez użytkownika lub wywołanie dynamicznego SQL, na przykład z użyciem EXEC (string), skompilowany plan XML Showplan dla funkcji zdefiniowanej przez użytkownika nie jest uwzględniony w tabeli zwracanej
sys.dm_exec_query_planprzez procedurę wsadową lub przechowywaną. Zamiast tego musisz wykonać osobne wywołanie dosys.dm_exec_query_planuchwytu planu, który odpowiada funkcji zdefiniowanej przez użytkownika.
Gdy zapytanie ad hoc wykorzystuje prostą lub wymuszoną parametryzację, kolumna query_plan zawiera tylko tekst instrukcji, a nie rzeczywisty plan zapytania. Aby zwrócić plan zapytania, wywołaj sys.dm_exec_query_plan uchwyt planu przygotowanego parametryzowanego zapytania. Możesz określić, czy zapytanie zostało parametryzowane, odwołując się do kolumny sql widoku sys.syscacheobjects lub kolumny tekstowej w widoku zarządzania dynamicznego sys.dm_exec_sql_text .
Note
Ze względu na ograniczenie liczby zagnieżdżonych poziomów dozwolonych w typie danych xml , nie sys.dm_exec_query_plan można zwracać planów zapytań spełniających lub przekraczających 128 poziomów zagnieżdżonych elementów. We wcześniejszych wersjach programu SQL Server ten warunek uniemożliwił zwracanie planu zapytania i generowanie błędu 6335. W programie SQL Server 2005 (9.x) z dodatkiem Service Pack 2 lub nowszym kolumna query_plan zwraca wartość NULL.
Możesz użyć funkcji zarządzania dynamicznego sys.dm_exec_text_query_plan (Transact-SQL ), aby zwrócić wyjście planu zapytania w formacie tekstowym.
Permissions
Aby wykonać sys.dm_exec_query_plan, użytkownik musi być członkiem stałej roli serwera administratora systemu lub posiadać VIEW SERVER STATE uprawnienia do serwera.
Uprawnienia dla wersji SQL Server 2022 i nowszych
Wymaga VIEW SERVER PERFORMANCE STATE uprawnień na serwerze.
Examples
Poniższe przykłady pokazują, jak korzystać z dynamicznego widoku sys.dm_exec_query_plan zarządzania.
Aby zobaczyć XML Showplans, wykonaj następujące zapytania w Edytor Power Query w SQL Server Management Studio, a następnie wybierz ShowPlanXML w kolumnie query_plan tabeli zwracanej przez sys.dm_exec_query_plan The XML Showplan wyświetla się w panelu podsumowań Management Studio. Aby zapisać XML Showplan do pliku, kliknij prawym przyciskiem ShowPlanXML w kolumnie query_plan , wybierz Save Results As i nazwij plik w formacie <file name>.sqlplan; na przykład MyXMLShowplan.sqlplan.
A. Pobierz plan zapytań w pamięci podręcznej dla wolno działającego Transact-SQL zapytania lub partii
Plany zapytań dla różnych typów Transact-SQL partii, takich jak ad hoc partie, procedury przechowywane i funkcje definiowane przez użytkownika, są buforowane w obszarze pamięci zwanym pamięćą podręczną planu. Każdy plan zapytań w pamięci podręcznej jest identyfikowany unikalnym identyfikatorem zwanym uchwytem planu. Możesz określić ten uchwyt planu za pomocą dynamicznego widoku sys.dm_exec_query_plan zarządzania, aby pobrać plan wykonania dla konkretnego zapytania lub partii Transact-SQL.
Jeśli zapytanie Transact-SQL lub partia działa długo na konkretnym połączeniu z SQL Server, pobierz plan wykonania tego zapytania lub partii, aby odkryć, co powoduje opóźnienie. Poniższy przykład pokazuje, jak pobrać XML Showplan dla wolno działającego zapytania lub partii.
Note
Aby uruchomić ten przykład, zastąp wartości dla session_id i plan_handle na wartości specyficzne dla twojego serwera.
Najpierw pobierz identyfikator sesji (SPID) dla procesu wykonującego zapytanie lub wsadę, używając procedury sp_who przechowywanej:
exec sp_who;
GO
Zbiór wyników, który jest zwracany przez , sp_who wskazuje, że identyfikator sesji to .54 Możesz użyć identyfikatora sesji w dynamicznym widoku sys.dm_exec_requests zarządzania, aby pobrać uchwyt planu, korzystając z następującego zapytania:
SELECT * FROM sys.dm_exec_requests
WHERE session_id = 54;
GO
Tabela zwracana przez sys.dm_exec_requests wskazuje, że uchwyt planu dla wolno działającego zapytania lub partii to 0x06000100A27E7C1FA821B10600, co można określić jako plan_handle argument z , sys.dm_exec_query_plan aby pobrać plan wykonania w formacie XML w następujący sposób. Plan wykonania w formacie XML dla wolno działającego zapytania lub partii zawarty jest w kolumnie tabeli query_plan zwracanej przez sys.dm_exec_query_plan.
SELECT *
FROM sys.dm_exec_query_plan (0x06000100A27E7C1FA821B10600);
GO
B. Pobierz każdy plan zapytań z pamięci podręcznej planu
Aby pobrać migawkę wszystkich planów zapytań znajdujących się w pamięci podręcznej planów, pobierz uchwyty planów wszystkich planów zapytań w pamięci podręcznej, wykonując zapytanie w sys.dm_exec_cached_plans dynamicznym widoku zarządzania. Uchwyty planu są przechowywane w kolumnie plan_handle .sys.dm_exec_cached_plans Następnie użyj operatora CROSS APPLY, aby przekazać uchwyty planu w sys.dm_exec_query_plan następujący sposób. Dane wyjściowe programu Showplan XML dla każdego planu aktualnie w pamięci podręcznej planu znajduje się w kolumnie query_plan tabeli, która jest zwracana.
SELECT *
FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle);
GO
C. Pobierz każdy plan zapytań, dla którego serwer zebrał statystyki zapytań z pamięci podręcznej planu
Aby pobrać migawkę wszystkich planów zapytań, dla których serwer zebrał statystyki aktualnie znajdujące się w pamięci podręcznej planów, pobierz uchwyty planów tych planów w pamięci podręcznej, zapytując sys.dm_exec_query_stats widok zarządzania dynamicznego. Uchwyty planu są przechowywane w kolumnie plan_handle .sys.dm_exec_query_stats Następnie użyj operatora CROSS APPLY, aby przekazać uchwyty planu w sys.dm_exec_query_plan następujący sposób. Wyjście XML Showplan dla każdego planu, dla którego serwer zebrał statystyki aktualnie w pamięci podręcznej planu, znajduje się w kolumnie query_plan tabeli, która jest zwracana.
SELECT *
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle);
GO
D. Pobierz informacje o pięciu największych zapytaniach według średniego czasu CPU
Poniższy przykład zwraca plany oraz średni czas CPU dla pięciu najczęściej zapytań.
SELECT TOP 5 total_worker_time/execution_count AS [Avg CPU Time],
plan_handle, query_plan
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle)
ORDER BY total_worker_time/execution_count DESC;
GO