Udostępnij za pomocą


sys.dm_exec_query_plan_stats (Transact-SQL)

Dotyczy: SQL Server 2019 (15.x) i nowsze wersje bazy danychSQL Sql Database azure SQLDatabasew usłudze Microsoft Fabric

Zwraca odpowiednik ostatniego znanego rzeczywistego planu wykonywania dla wcześniej buforowanego planu zapytania.

Składnia

sys.dm_exec_query_plan_stats ( 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_handle jest varbinary(64).

Plan_handle można uzyskać z następujących dynamicznych obiektów zarządzania:

Zwrócona 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 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 orders aplikacji może mieć nazwę orderproc;1, orderproc;2itd. W przypadku partii ad hoc i przygotowanych kolumna ma wartość null.

Kolumna jest dopuszczana do wartości null.
encrypted bit Wskazuje, czy odpowiednia procedura składowana jest szyfrowana.

0 = niezaszyfrowane
1 = zaszyfrowane

Kolumna nie może zawierać wartości null.
query_plan xml Zawiera ostatni znany środowisko uruchomieniowe Showplan reprezentację rzeczywistego planu wykonywania zapytania określonego przy użyciu 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

Jest to funkcja zgody. Aby włączyć na poziomie serwera, użyj flagi śledzenia 2451. Aby włączyć na poziomie bazy danych, użyj LAST_QUERY_PLAN_STATS opcji ALTER DATABASE SCOPED CONFIGURATION.

Ta funkcja systemowa działa w ramach uproszczonej infrastruktury profilowania statystyk wykonywania zapytań. Aby uzyskać więcej informacji, zobacz Infrastruktura profilowania zapytań.

Dane wyjściowe programu Showplan według sys.dm_exec_query_plan_stats zawierają następujące informacje:

  • Wszystkie informacje dotyczące czasu kompilacji znalezione w planie buforowanym

  • Informacje o środowisku uruchomieniowym, takie jak rzeczywista liczba wierszy na operator, łączny czas procesora CPU i czas wykonywania zapytania, ostrzeżenia dotyczące rozlania, rzeczywista wersja DOP, maksymalna użyta pamięć i udzielona pamięć

W następujących warunkach dane wyjściowe programu Showplan równoważne rzeczywistemu planowi wykonania są zwracane w query_plan kolumnie zwracanej tabeli dla sys.dm_exec_query_plan_statselementu :

W poniższych warunkach uproszczone1 dane wyjściowe programu Showplan są zwracane w query_plan kolumnie zwracanej tabeli dla sys.dm_exec_query_plan_statselementu :

  • Plan można znaleźć w sys.dm_exec_cached_plans.

    oraz

  • Zapytanie jest wystarczająco proste, zwykle podzielone na kategorie w ramach obciążenia OLTP.

1 Odnosi się do programu Showplan, który zawiera tylko operator węzła głównego (SELECT).

W następujących warunkach żadne dane wyjściowe nie są zwracane z sys.dm_exec_query_plan_statselementu :

  • Plan zapytania określony przy użyciu plan_handle został wykluczony z pamięci podręcznej planu.

    lub

  • Plan zapytania nie był możliwy do buforowania w pierwszej kolejności. Aby uzyskać więcej informacji, zobacz Buforowanie i ponowne używanie planu wykonywania.

Uwaga / Notatka

Ograniczenie liczby poziomów zagnieżdżonych dozwolonych w typie danych XML oznacza, że sys.dm_exec_query_plan nie można zwrócić 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.

Permissions

Program SQL Server 2019 (15.x) i starsze wersje wymagają VIEW SERVER STATE uprawnień na serwerze.

Program SQL Server 2022 (16.x) i nowsze wersje wymagają VIEW SERVER PERFORMANCE STATE uprawnień na serwerze.

Przykłady

A. Zapoznaj się z ostatnim znanym rzeczywistym planem wykonywania zapytań dla określonego buforowanego planu

Poniższe przykładowe zapytania sys.dm_exec_cached_plans umożliwiają znalezienie interesującego planu i skopiowanie go plan_handle z danych wyjściowych.

SELECT * FROM sys.dm_exec_cached_plans;
GO

Następnie, aby uzyskać ostatni znany rzeczywisty plan wykonywania zapytania, użyj skopiowanego plan_handle z funkcją sys.dm_exec_query_plan_statssystemową .

SELECT * FROM sys.dm_exec_query_plan_stats(< copied plan_handle >);
GO

B. Zapoznaj się z ostatnim znanym rzeczywistym planem wykonywania zapytań dla wszystkich buforowanych planów

SELECT * FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
CROSS APPLY sys.dm_exec_query_plan_stats(plan_handle) AS qps;
GO

C. Zapoznaj się z ostatnim znanym rzeczywistym planem wykonywania zapytań dla określonego buforowanego planu i tekstu zapytania

SELECT * FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
CROSS APPLY sys.dm_exec_query_plan_stats(plan_handle) AS qps
WHERE st.text LIKE 'SELECT * FROM Person.Person%';
GO

D. Przyjrzyj się buforowanym zdarzeń wyzwalacza

SELECT * FROM sys.dm_exec_cached_plans
CROSS APPLY sys.dm_exec_query_plan_stats(plan_handle)
WHERE objtype = 'Trigger';
GO