Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Применимо к: SQL Server 2019 (15.x) и более поздних версий
базы данных SQL
Azure Для Управляемого экземпляра
SQL Azure в Microsoft Fabric
Возвращает эквивалент последнего известного фактического плана выполнения для ранее кэшированного плана запроса.
Синтаксис
sys.dm_exec_query_plan_stats ( plan_handle )
Аргументы
plan_handle
Маркер, который однозначно определяет план выполнения запроса для пакета, который выполнил и его план находится в кэше планов или в настоящее время выполняется. plan_handle — varbinary(64).
plan_handle можно получить из следующих объектов динамического управления:
- sys.dm_exec_cached_plans
- sys.dm_exec_query_stats
- sys.dm_exec_requests
- sys.dm_exec_procedure_stats
- sys.dm_exec_trigger_stats
Таблица возвращенной информации
| Имя столбца | Тип данных | Description |
|---|---|---|
dbid |
smallint | Идентификатор базы данных, в контексте которой выполнялась компиляция инструкции Transact-SQL, соответствующей данному плану. Для нерегламентированных и подготовленных инструкций SQL это идентификатор базы данных, в которой происходила компиляция инструкции. Столбец может содержать значение NULL. |
objectid |
int | Идентификатор объекта (например хранимой процедуры или определяемой пользователем функции) для этого плана запроса. Для нерегламентированных и подготовленных пакетов этот столбец имеет значение NULL. Столбец может содержать значение NULL. |
number |
smallint | Целое число нумерованных хранимых процедур. Например, группа процедур для orders приложения может называться orderproc;1и orderproc;2т. д. Для нерегламентированных и подготовленных пакетов этот столбец имеет значение NULL.Столбец может содержать значение NULL. |
encrypted |
bit | Указывает, зашифрована ли соответствующая хранимая процедура. 0 = не зашифрована 1 = зашифрована Столбец не допускает значение NULL. |
query_plan |
xml | Содержит последнее известное представление showplan среды выполнения фактического плана выполнения запроса, указанного с plan_handle. Представление Showplan имеет формат XML. Для каждого пакета, содержащего, например, нерегламентированные инструкции Transact-SQL, вызовы хранимых процедур и вызовы определяемых пользователем функций, формируется один план. Столбец может содержать значение NULL. |
Замечания
Это функция, включаемая пользователем. Чтобы включить на уровне сервера, используйте флаг трассировки 2451. Чтобы включить на уровне базы данных, используйте LAST_QUERY_PLAN_STATS параметр ALTER DATABASE SCOPED CONFIGURATION.
Эта системная функция работает под инфраструктурой профилирования статистики выполнения упрощенных запросов. Дополнительные сведения см. в разделе Инфраструктура профилирования запросов.
Выходные данные sys.dm_exec_query_plan_stats Showplan содержат следующие сведения:
Все сведения о времени компиляции, найденные в кэшированном плане
Сведения о среде выполнения, такие как фактическое количество строк на оператора, общее время запроса ЦП и время выполнения, предупреждения о разливе, фактическое DOP, максимальное используемое память и предоставленную память
В следующих условиях выходные данные Showplan, эквивалентные фактическому плану выполнения, возвращаются в query_plan столбце возвращаемой таблицы для sys.dm_exec_query_plan_stats:
План можно найти в sys.dm_exec_cached_plans.
и
Выполняемый запрос является сложным или ресурсоемким.
В следующих условиях в столбце возвращаемой таблицы в столбце возвращаемой таблицы возвращается упрощенноеquery_plan выходные данные Showplan:sys.dm_exec_query_plan_stats
План можно найти в sys.dm_exec_cached_plans.
и
Запрос достаточно прост, обычно классифицируется как часть рабочей нагрузки OLTP.
1 Относится к Showplan, который содержит только оператор корневого узла (SELECT).
В следующих условиях выходные данные не возвращаются из sys.dm_exec_query_plan_stats:
План запроса, указанный с помощью
plan_handle, был исключен из кэша планов.или
План запроса не был кэшируемым в первую очередь. Дополнительные сведения см. в разделе "Кэширование плана выполнения" и "Повторное использование".
Примечание.
Ограничение в количестве вложенных уровней, разрешенных в типе данных XML , означает, что sys.dm_exec_query_plan невозможно возвращать планы запросов, которые соответствуют или превышают 128 уровней вложенных элементов. В более ранних версиях SQL Server это условие не позволило возвращать план запроса и генерировать ошибку 6335. В SQL Server 2005 (9.x) с пакетом обновления 2 и более поздних версий query_plan столбец возвращается NULL.
Разрешения
ДЛЯ SQL Server 2019 (15.x) и более ранних версий требуется VIEW SERVER STATE разрешение на сервере.
ДЛЯ SQL Server 2022 (16.x) и более поздних версий требуется VIEW SERVER PERFORMANCE STATE разрешение на сервере.
Примеры
А. Просмотрите последний известный фактический план выполнения запросов для определенного кэшированного плана
В следующем примере запрашивается sys.dm_exec_cached_plans поиск интересного плана и копирование из plan_handle выходных данных.
SELECT * FROM sys.dm_exec_cached_plans;
GO
Затем, чтобы получить последний известный фактический план выполнения запроса, используйте скопированную plan_handle с системной функцией sys.dm_exec_query_plan_stats.
SELECT * FROM sys.dm_exec_query_plan_stats(< copied plan_handle >);
GO
B. Просмотрите последний известный фактический план выполнения запросов для всех кэшированных планов
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
В. Просмотрите последний известный фактический план выполнения запроса для определенного кэшированного плана и текста запроса
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. Просмотр кэшированных событий для триггера
SELECT * FROM sys.dm_exec_cached_plans
CROSS APPLY sys.dm_exec_query_plan_stats(plan_handle)
WHERE objtype = 'Trigger';
GO