Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Относится к: SQL Server 2016 (13.x) и более поздние версии
База данных SQL Azure
Управляемый экземпляр SQL Azure
SQL Database в Microsoft Fabric
Возвращает план выполнения запросов для запросов в тестовом режиме. Используйте этот DMV для получения XML showplan с временной статистикой.
Syntax
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. |
Limitations
Из-за возможного нарушения произвольного доступа (AV) при выполнении хранимой процедуры мониторинга с DMV, значение sys.dm_exec_query_statistics_xml атрибута <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.
Permissions
Требуется VIEW SERVER STATE разрешение на сервере в SQL Server 2019 (15.x) и более ранних версиях.
Требуется VIEW SERVER PERFORMANCE STATE разрешение на сервере в SQL Server 2022 (16.x) и более поздних версиях.
Требуется VIEW DATABASE STATE разрешение в базе данных на уровнях "Премиум" базы данных SQL.
Требуется администратор сервера или учетная запись администратора Microsoft Entra на уровнях "Стандартный" и "Базовый" базы данных SQL.
Examples
А. Просмотрите план динамических запросов в реальном времени и статистику выполнения для текущей партии.
В следующем примере используется 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