Поделиться через


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 — это smallint. session_id можно получить из следующих динамических объектов управления:

Таблица возвращена

Имя столбца Тип данных Описание
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) при выполнении хранимой процедуры мониторинга с 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