Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz 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 usłudze Microsoft Fabric
Zwraca Showplan w formacie tekstowym dla partii Transact-SQL lub dla konkretnego wyciągu w partii. Plan zapytań określony przez uchwyt planu może być albo buforowany, albo obecnie wykonywany. Ta funkcja tabelowa jest podobna do sys.dm_exec_query_plan (Transact-SQL), ale ma następujące różnice:
- Wyjście planu zapytania jest zwracane w formacie tekstowym.
- Wyjście planu zapytania nie jest ograniczone rozmiarem.
- Można określić poszczególne oświadczenia w partii.
Dotyczy do: SQL Server (SQL Server 2008 (10.0.x) i nowszy), Azure SQL Database.
Transact-SQL konwencje składni
Składnia
sys.dm_exec_text_query_plan
(
plan_handle
, { statement_start_offset | 0 | DEFAULT }
, { statement_end_offset | -1 | DEFAULT }
)
Arguments
plan_handle
Jest tokenem, który jednoznacznie identyfikuje plan wykonania zapytań dla partii, która została wykonana, a jej plan znajduje się w pamięci podręcznej planu lub jest obecnie wykonywana.
plan_handle jest varbinary(64).
Plan_handle można uzyskać z następujących dynamicznych obiektów zarządzania:
statement_start_offset | 0 | DOMYŚLNY
Wskazuje, w bajtach, pozycję początkową zapytania, którą wiersz opisuje w tekście swojego obiektu wsadowego lub trwałego.
statement_start_offset to inteligencja. Wartość 0 oznacza początek partii. Wartość domyślna to 0.
Przesunięcie początkowe instrukcji można uzyskać z następujących dynamicznych obiektów zarządzania:
statement_end_offset | -1 | DOMYŚLNY
Wskazuje, w bajtach, końcową pozycję zapytania, którą wiersz opisuje w tekście swojego obiektu wsadowego lub trwałego.
statement_start_offset to inteligencja.
Wartość -1 oznacza koniec partii. Wartość domyślna to -1.
Zwracana tabela
| Nazwa kolumny | Typ danych | Description |
|---|---|---|
| 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 (identyfikator obiektu) | int | Identyfikator obiektu (na przykład procedura składowana lub funkcja zdefiniowana przez użytkownika) dla tego planu zapytania. W przypadku partii ad hoc i przygotowanych kolumna ma wartość 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. W przypadku partii ad hoc i przygotowanych kolumna ma wartość null. Kolumna jest dopuszczana do wartości null. |
| Szyfrowane | bit | Wskazuje, czy odpowiednia procedura składowana jest szyfrowana. 0 = niezaszyfrowane 1 = zaszyfrowane Kolumna nie jest unieważniona. |
| query_plan | nvarchar(max) | Zawiera reprezentację planu wykonania zapytania w czasie kompilacji planu wykonania zapytania, który jest określony za pomocą plan_handle. Plan przedstawienia jest w formacie tekstowym. 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 żaden wynik Showplan nie jest zwracany w kolumnie planu zwróconej tabeli przez sys.dm_exec_text_query_plan:
Jeśli plan zapytań określony przez plan_handle został usunięty z pamięci podręcznej planu, kolumna query_plan w zwróconej tabeli jest nullowa. 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 z sys.dm_exec_text_query_plan.
Niektó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 pokazu takich zdań nie mogą być pobrane za pomocą sys.dm_exec_text_query_plan , ponieważ nie istnieją w pamięci podręcznej.
Jeśli procedura wsadowa lub zapisana 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 przez sys.dm_exec_text_query_plan dla procedury wsadowej lub przechowywanej. Zamiast tego musisz wykonać osobne wywołanie sys.dm_exec_text_query_plan dla plan_handle odpowiadającego funkcji zdefiniowanej przez użytkownika.
Gdy zapytanie ad hoc stosuje prostą lub wymuszoną parametryzację, kolumna query_plan zawiera tylko tekst instrukcji, a nie rzeczywisty plan zapytania. Aby zwrócić plan zapytania, zadzwoń sys.dm_exec_text_query_plan dla uchwytu planu przygotowanego parametryzowanego zapytania. Możesz określić, czy zapytanie zostało parametryzowane, odwołując się do kolumny sql w widoku sys.syscacheobjects lub do kolumny tekstowej w widoku zarządzania dynamicznego sys.dm_exec_sql_text .
Permissions
Aby wykonać sys.dm_exec_text_query_plan, użytkownik musi być członkiem stałej roli administratora systemu lub posiadać uprawnienia VIEW SERVER STATE na serwerze.
Uprawnienia dla programu SQL Server 2022 i nowszych
Wymaga uprawnienia WYŚWIETL STAN WYDAJNOŚCI SERWERA na serwerze.
Przykłady
A. Pobieranie planu zapytań w pamięci podręcznej dla wolno działającego Transact-SQL zapytania lub partii
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ć Showplan dla wolno działającego zapytania lub partii.
Uwaga / Notatka
Aby przeprowadzić ten przykład, zastąp wartości session_id i plan_handle wartościami specyficznymi dla twojego serwera.
Najpierw pobierz identyfikator sesji (SPID) dla procesu wykonującego zapytanie lub wsadę, używając procedury sp_who przechowywanej:
USE master;
GO
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:
USE master;
GO
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 Poniższy przykład zwraca plan zapytań dla określonego uchwytu planu i wykorzystuje domyślne wartości 0 i -1 do zwracania wszystkich instrukcji w zapytaniu lub partii.
USE master;
GO
SELECT query_plan
FROM sys.dm_exec_text_query_plan (0x06000100A27E7C1FA821B10600,0,-1);
GO
B. Pobieranie każdego planu 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_text_query_plan następujący sposób. Wynik Showplan dla każdego planu aktualnie znajdującego się w pamięci podręcznej planu znajduje się w kolumnie query_plan tabeli, która jest zwracana.
USE master;
GO
SELECT *
FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_text_query_plan(cp.plan_handle, DEFAULT, DEFAULT);
GO
C. Pobieranie każdego planu 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_text_query_plan następujący sposób. Wynik Showplan dla każdego planu znajduje się w kolumnie query_plan tabeli, która jest zwracana.
USE master;
GO
SELECT * FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_text_query_plan(qs.plan_handle, qs.statement_start_offset, qs.statement_end_offset);
GO
D. Pobieranie informacji o pięciu największych zapytaniach według średniego czasu CPU
Poniższy przykład zwraca plany zapytań oraz średni czas CPU dla pięciu najczęstszych zapytań. Funkcja sys.dm_exec_text_query_plan określa domyślne wartości 0 i -1 zwracają wszystkie instrukcje w partii w planie 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_text_query_plan(qs.plan_handle, 0, -1)
ORDER BY total_worker_time/execution_count DESC;
GO