sys.dm_exec_text_query_plan (języka Transact-SQL)
Zwraca w formacie tekstu dla Showplan Transact-SQL partia lub dla konkretnej instrukcja w partia.Plan kwerend określonej przez dojście do planu można albo być buforowane lub aktualnie.W tej tabela-ważnych funkcja jest podobna do sys.dm_exec_query_plan (języka Transact-SQL), ale ma następujące różnice:
Dane wyjściowe planu kwerend są zwracane w formacie tekstowym.
Rozmiar nie jest ograniczony wyjścia planu kwerend.
Można określić poszczególne instrukcje partia .
Składnia
sys.dm_exec_text_query_plan
(
plan_handle
, { statement_start_offset | 0 | DEFAULT }
, { statement_end_offset | -1 | DEFAULT }
)
Argumenty
plan_handle
Jednoznacznie identyfikuje plan kwerend dla partia , która jest buforowane lub jest w trakcie wykonywania.plan_handleis varbinary(64).Uchwyt planu można uzyskać z następujących obiektów dynamicznego zarządzania:
statement_start_offset | 0 | DOMYŚLNE
Wskazuje, w bajtach, pozycji początkowej kwerendę, która zawiera opis wiersza tekstu jego partia lub trwałych obiektów.statement_start_offset is int.Wartość 0 oznacza początek partia.Wartość domyślna to 0.Przesunięcie rozpoczęcia instrukcja można uzyskać z następujących obiektów dynamicznego zarządzania:
statement_end_offset | -1 | DOMYŚLNE
Określa w bajtach, pozycję końcową kwerendę, która zawiera opis wiersza tekstu jego partia lub trwałych obiektów.statement_start_offset is int.
Wartość -1 oznacza zakończenie partia.Wartość domyślna to -1.
Zwracana tabela
Nazwa kolumny |
Typ danych |
Opis |
---|---|---|
Identyfikator DBID |
smallint |
Identyfikator kontekstu bazy danych, które obowiązywały w po Transact-SQL instrukcja odpowiadającej plan ten został skompilowany.W przypadku partii ad hoc i przygotowany w tej kolumna jest null. Kolumna jest nullable. |
Identyfikator obiektu |
int |
Identyfikator obiektu (na przykład procedura składowana lub funkcjazdefiniowanej przez użytkownika) dla tego planu kwerend.W przypadku partii ad hoc i przygotowany w tej kolumna jest null. Kolumna jest nullable. |
liczba |
smallint |
Liczba całkowita numerowanych procedura składowana .Na przykład, grupa procedury zamówienia aplikacji mogą być nazwane orderproc; 1, orderproc; 2i tak dalej.W przypadku partii ad hoc i przygotowany w tej kolumna jest null. Kolumna jest nullable. |
szyfrowane |
bit |
Wskazuje, czy odpowiednie procedura składowana jest szyfrowany. 0 = nie zaszyfrowany 1 = zaszyfrowanych Kolumna nie jest nullable. |
query_plan |
nvarchar(max) |
Zawiera kompilacji -czas Showplan reprezentację plan wykonania kwerend, określoną z plan_handle.Showplan jest w formacie tekstowym.Jeden plan jest generowany dla każdej partia zawierającym, na przykład ad hoc Transact-SQL instrukcje, wywołań procedura składowana i wywołań funkcja zdefiniowanej przez użytkownika. Kolumna jest nullable. |
Uwagi
W następujących warunkach wyjściowego Showplan nie jest zwracany w planu kolumna zwrócone tabela dla sys.dm_exec_text_query_plan:
Jeśli planowane kwerendy, która jest określana za pomocą plan_handle został wykluczony z pamięci podręcznej planu query_plan kolumna zwrócone tabela jest null.Na przykład, warunek ten może wystąpić, jeśli czas sys.dm_exec_text_query_plan.
Niektóre Transact-SQL instrukcji nie są buforowane, takich jak instrukcje operacji luzem lub instrukcji zawierających literały ciągów ciąg większej niż 8 KB w rozmiarze.Showplans takie deklaracje nie można pobrać za pomocą sys.dm_exec_text_query_plan , ponieważ nie istnieją w pamięci podręcznej.
Jeśli Transact-SQL procedura składowanapartia lub zawiera wywołanie funkcja zdefiniowanej przez użytkownika lub wywołanie dynamicznego SQL, na przykład za pomocą EXEC ( string), skompilowany XML Showplan dla funkcja zdefiniowanej przez użytkownika nie znajduje się w tabela zwrócone przez sys.dm_exec_text_query_plan dla partia lub procedura składowana.Zamiast tego należy wykonać osobnej wywołania sys.dm_exec_text_query_plan do plan_handle , który odpowiada zdefiniowanej przez użytkownika funkcja.
Gdy kwerend ad hoc używa prostego lub wymuszonego parametryzacji query_plan kolumna będzie zawierać tylko tekst instrukcja i nie planu kwerend rzeczywiste.Aby przywrócić planu kwerend, wywołanie sys.dm_exec_text_query_plan dla dojścia plan przygotowany sparametryzowanych kwerend.Można określić, czy kwerenda została sparametryzowana przy odwoływaniu się do sql kolumna sys.syscacheobjects widok lub tekst kolumna z sys.dm_exec_sql_text dynamiczny widok zarządzania.Aby uzyskać więcej informacji, zobacz temat parametryzacji Parametryzacja proste i Parametryzacja wymuszony.
Uprawnienia
wykonaćsys.dm_exec_text_query_plan, użytkownik musi być element członkowski sysadminstała rola serwera albo mieć uprawnienie WYŚWIETL stan serwera na serwerze.
Przykłady
A.Pobrać buforowanego planu kwerend dla spowolnić działanie kwerendy języka Transact -SQL lub partia
Jeśli Transact-SQL kwerendy lub program partia jest uruchamiany dużo czas dla określonego połączenia, aby SQL Server, pobrać plan wykonania dla tej kwerendy lub partia do wykrywania, co jest przyczyną opóźnienia.Poniższy przykład pokazuje jak pobrać Showplan spowolnić działanie kwerendy lub partia.
Ostrzeżenie
Aby uruchomić ten przykład, należy zastąpić wartości dla session_id i plan_handle z wartości specyficznych dla serwera.
Najpierw należy pobrać proces serwera ID (SPID) dla procesu wykonywania kwerendy lub partia przy użyciu sp_who procedura składowana:
USE master;
GO
EXEC sp_who;
GO
zestaw wyników zwracanego przez sp_who wskazuje, że identyfikator SPID jest 54.Użyj identyfikatora SPID z sys.dm_exec_requests dynamiczny widok zarządzania pobrać uchwytu plan za pomocą następującej kwerendy:
USE master;
GO
SELECT * FROM sys.dm_exec_requests
WHERE session_id = 54;
GO
tabela jest zwracany przez sys.dm_exec_requests wskazuje, że plan obsługę spowolnić działanie kwerendy lub partia jest 0x06000100A27E7C1FA821B10600.W poniższym przykładzie zwraca plan kwerend dla dojścia określony plan i używają domyślnych wartości -1 i 0 zwraca wszystkie instrukcje w kwerendzie lub partia.
USE master;
GO
SELECT query_plan
FROM sys.dm_exec_text_query_plan (0x06000100A27E7C1FA821B10600,0,-1);
GO
B.Pobieranie z pamięci podręcznej planu każdego planu kwerend
Aby pobrać migawka wszystkich planów kwerend znajdujących się w pamięci podręcznej planu, pobrać uchwyty plan wszystkich planów kwerend w pamięci podręcznej przez badanie sys.dm_exec_cached_plans dynamiczny widok zarządzania.Uchwyty planu są przechowywane w plan_handle kolumna sys.dm_exec_cached_plans.Uchwyty plan, aby przekazać za pomocą granic ZASTOSOWAĆ operator sys.dm_exec_text_query_plan w następujący sposób.Showplan wyjściowy dla każdego planu aktualnie w pamięci podręcznej plan jest w query_plan kolumna tabela , 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.Pobrać każdego planu kwerend, dla którego serwer zebrał statystyki kwerendy z pamięci podręcznej plan
Aby pobrać migawka wszystkich planów kwerend, dla którego serwer ma zebrane statystyki, które aktualnie znajdują się w pamięci podręcznej planu, pobrać uchwyty planu tych planów w pamięci podręcznej przez badanie sys.dm_exec_query_stats dynamiczny widok zarządzania.Uchwyty planu są przechowywane w plan_handle kolumna sys.dm_exec_query_stats.Uchwyty plan, aby przekazać za pomocą granic ZASTOSOWAĆ operator sys.dm_exec_text_query_plan w następujący sposób.Showplan wyjściowy dla każdego planu jest w query_plan kolumna tabela , 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.Pobranie informacji o górnym kwerend pięciu Procesora średni czas
Poniższy przykład zwraca planów kwerend i średnia Procesora czas górny pięciu kwerend.Sys.dm_exec_text_query_planfunkcja Określa domyślne wartości od 0 do -1, aby przywrócić wszystkie instrukcje w partia w planu kwerend.
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
Zobacz także