Возвращает план выполнения запросов для запросов в тестовом режиме. Используйте это динамическое административное представление для получения XML-файла showplan с временной статистикой.
Синтаксис
sys.dm_exec_query_statistics_xml(session_id)
Аргументы
session_id
Идентификатор сеанса для поиска пакета. session_id — это smallint.
session_id можно получить из следующих динамических объектов управления:
Идентификатор запроса. Не допускает значения NULL.
sql_handle
varbinary(64)
Маркер, который однозначно идентифицирует пакет или хранимую процедуру, в которую входит запрос. Может принимать значение NULL.
plan_handle
varbinary(64)
Маркер, однозначно определяющий план выполнения запроса для пакета, выполняющегося в данный момент. Допускает значение NULL.
query_plan
xml
Содержит представление Showplan во время выполнения плана выполнения запроса, указанного с частичной статистикой plan_handle. План Showplan представлен в формате XML. Для каждого пакета, содержащего, например, нерегламентированные инструкции Transact-SQL, вызовы хранимых процедур и вызовы определяемых пользователем функций, формируется один план. Допускает значение NULL.
Ограничения
Из-за возможного нарушения произвольного доступа (AV) при выполнении хранимой процедуры мониторинга с DMV, значение ParameterRuntimeValue атрибута <ParameterList> Showplan XML было удалено в 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 и более поздних версиях с помощью флага трассировки 2446. Этот флаг трассировки позволяет собирать значение параметра среды выполнения за счет введения дополнительных затрат.
Внимание!
Флаг трассировки 2446 не предназначен для постоянного использования в рабочей среде, а только для кратковременного устранения неполадок. Использование этого флага трассировки приводит к дополнительным и, возможно, значительным затратам на ЦП и память, так как он создает фрагмент Showplan XML со сведениями о параметрах среды выполнения, независимо от того, вызывается ли sys.dm_exec_query_statistics_xml dmV.
В 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.
Разрешения
Требуется VIEW SERVER STATE разрешение на сервере в SQL Server 2019 (15.x) и более ранних версиях.
Требуется VIEW SERVER PERFORMANCE STATE разрешение на сервере в SQL Server 2022 (16.x) и более поздних версиях.
Требуется VIEW DATABASE STATE разрешение в базе данных на уровнях "Премиум" базы данных SQL.
Требуется администратор сервера или учетная запись администратора Microsoft Entra на уровнях "Стандартный" и "Базовый" базы данных SQL.
Примеры
А. Просмотрите план динамических запросов в реальном времени и статистику выполнения для текущей партии.
В следующем примере используется sys.dm_exec_requests для поиска интересного запроса и копирования данных из его session_id.
SELECT *
FROM sys.dm_exec_requests;
GO
Затем, чтобы получить план динамического запроса и статистику выполнения, используйте скопированную session_id с системной функцией sys.dm_exec_query_statistics_xml. Выполните этот запрос в другом сеансе, отличном от сеанса, в котором выполняется запрос.
SELECT * FROM sys.dm_exec_query_statistics_xml(< copied session_id >);
GO
Или в совокупности со всеми выполняющимися запросами. Выполните этот запрос в другом сеансе, отличном от сеанса, в котором выполняется запрос.
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 AS er
CROSS APPLY sys.dm_exec_query_statistics_xml(session_id) AS eqs
WHERE er.session_id <> @@SPID;
GO
Сведения о том, как просмотреть динамический план выполнения активного запроса в SQL Server Management Studio. Использование статистики выполнения для отладки проблем с производительностью запросов.