Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: 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