sys.dm_exec_query_statistics_xml (Transact-SQL)
Область применения: SQL Server 2016 (13.x) и более поздних версий База данных SQL Azure Управляемый экземпляр SQL Azure
Возвращает план выполнения запросов для запросов в тестовом режиме. Используйте это динамическое административное представление для получения XML-файла showplan с временной статистикой.
Синтаксис
sys.dm_exec_query_statistics_xml(session_id)
Аргументы
session_id
Идентификатор сеанса, выполняющий пакет для поиска. session_id имеет небольшой размер. session_id можно получить из следующих динамических объектов управления:
Возвращаемая таблица
Имя столбца | Тип данных | Description |
---|---|---|
session_id | smallint | Идентификатор сеанса. Не допускает значения NULL. |
request_id | int | Идентификатор запроса. Не допускает значения NULL. |
sql_handle | varbinary(64) | Токен, однозначно определяющий пакет или хранимую процедуру, частью которой является запрос. Допускает значение NULL. |
plan_handle | varbinary(64) | Токен, однозначно определяющий план выполнения запроса для пакета, который выполняется в данный момент. Допускает значение NULL. |
query_plan | xml | Содержит представление showplan среды выполнения плана выполнения запроса, указанного plan_handle с частичной статистикой. Представление Showplan имеет формат XML. Для каждого пакета, содержащего, например, нерегламентированные инструкции Transact-SQL, вызовы хранимых процедур и вызовы определяемых пользователем функций, формируется один план. Допускает значение NULL. |
Замечания
Внимание
Владение возможным нарушением случайного доступа (AV) при выполнении хранимой процедуры мониторинга с sys.dm_exec_query_statistics_xml
динамическим административным представлением значение атрибута <Showplan XML ParameterList> ParameterRuntimeValue
было удалено в SQL Server 2017 (14.x) CU 26 и SQL Server 2019 (15.x) CU 12. Это значение может быть полезно при устранении неполадок с длительными хранимыми процедурами.
Начиная с SQL Server 2017 (14.x) CU 31 и SQL Server 2019 (15.x) CU 19, коллекция значения ParameterRuntimeValue
ParameterList> атрибута <Showplan XML была повторно включена с включением флага трассировки 2446. Этот флаг трассировки позволяет собирать значение параметра среды выполнения за счет введения дополнительных затрат.
Предупреждение
Флаг трассировки 2446 не предназначен для непрерывного включения в рабочей среде, но только в целях устранения неполадок с ограниченным временем. Использование этого флага трассировки приведет к дополнительным и, возможно, значительным издержкам с точки зрения ресурсов ЦП и памяти, так как мы создаем фрагмент Showplan XML со сведениями о параметрах среды выполнения, независимо от того, вызывается ли динамическое административное представление sys.dm_exec_query_statistics_xml
.
Примечание.
Начиная с SQL Server 2022 (16.x), База данных SQL Azure и Управляемый экземпляр SQL Azure для этого на уровне базы данных см. параметр FORCE_SHOWPLAN_RUNTIME_PARAMETER_COLLECTION в ALTER DATABASE SCOPED CONFIGURATION (Transact-SQL).
Эта системная функция доступна начиная с SQL Server 2016 (13.x) с пакетом обновления 1 (SP1). См. статью 3190871 базы знаний
Эта системная функция работает как в стандартной, так и в инфраструктуре статистики выполнения упрощенных запросов. Дополнительные сведения см. в разделе Инфраструктура профилирования запросов.
В следующих условиях выходные данные Showplan не возвращаются в столбце query_plan возвращаемой таблицы для sys.dm_exec_query_statistics_xml:
- Если план запроса, соответствующий указанному session_id, больше не выполняется, столбец query_plan возвращаемой таблицы имеет значение NULL. Например, это условие может произойти, если существует задержка времени между моментом захвата дескриптора плана и когда он использовался с sys.dm_exec_query_statistics_xml.
Из-за ограничения количества вложенных уровней, разрешенных в типе данных XML , sys.dm_exec_query_statistics_xml не может возвращать планы запросов, которые соответствуют или превышают 128 уровней вложенных элементов. В более ранних версиях SQL Server это условие не позволило возвращать план запроса и генерировать ошибку 6335. В SQL Server 2005 (9.x) с пакетом обновления 2 и более поздних версий столбец query_plan возвращает значение NULL.
Разрешения
Для SQL Server требуется VIEW SERVER STATE
разрешение на сервере.
Для уровней "Премиум" Базы данных SQL требуется разрешение VIEW DATABASE STATE
в базе данных. Для База данных SQL уровня "Стандартный" и "Базовый" требуется администратор сервера или учетная запись администратора Microsoft Entra.
Разрешения для SQL Server 2022 и более поздних версий
Требуется разрешение VIEW SERVER PERFORMANCE STATE на сервере.
Примеры
А. Просмотр динамического плана запросов и статистики выполнения для работающего пакета
В следующем примере запросы sys.dm_exec_requests , чтобы найти интересный запрос и скопировать его session_id
из выходных данных.
SELECT * FROM sys.dm_exec_requests;
GO
Затем, чтобы получить динамический план запроса и статистику выполнения, используйте скопированную session_id
с системной функцией sys.dm_exec_query_statistics_xml.
--Run this in a different session than the session in which your query is running.
SELECT * FROM sys.dm_exec_query_statistics_xml(< copied session_id >);
GO
Или в сочетании со всеми выполняемыми запросами.
--Run this in a different session than the session in which your query is running.
SELECT
eqs.query_plan,
er.session_id,
er.request_id,
er.database_id,
er.start_time,
er.[status],
er.wait_type,
er.wait_resource,
er.last_wait_type,
(er.cpu_time/1000) AS cpu_time_sec,
(er.total_elapsed_time/1000)/60 AS elapsed_time_minutes,
(er.logical_reads*8)/1024 AS logical_reads_KB,
er.granted_query_memory,
er.dop,
er.row_count,
er.query_hash,
er.query_plan_hash
FROM sys.dm_exec_requests er
CROSS APPLY sys.dm_exec_query_statistics_xml(session_id) eqs
WHERE er.session_id <> @@spid;
GO
См. также
Флаги трассировки
Динамические административные представления и функции (Transact-SQL)
Динамические административные представления базы данных (Transact-SQL)