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


sys.dm_exec_requests (Transact-SQL)

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure конечной точке аналитики платформы Аналитики Azure Synapse Analytics (PDW) в Microsoft Fabric Хранилище в Microsoft Fabric

Возвращает сведения о каждом запросе, который выполняется в SQL Server. Дополнительные сведения о запросах см. в руководстве по архитектуре потоков и задач.

Примечание.

Чтобы вызвать это из выделенного пула SQL в Azure Synapse Analytics или Analytics Platform System (PDW), ознакомьтесь со статьей sys.dm_pdw_exec_requests (Transact-SQL). Для бессерверного пула SQL или Microsoft Fabric используется sys.dm_exec_requests.

Имя столбца Тип данных Description
session_id smallint Идентификатор сеанса, к которому относится данный запрос. Не допускает значения NULL.
request_id int Идентификатор запроса. Уникален в контексте сеанса. Не допускает значения NULL.
start_time datetime Метка времени поступления запроса. Не допускает значения NULL.
status nvarchar(30) Состояние запроса. Может использоваться одно из следующих значений:

background
откат
выполняется
готово к запуску
спящий режим
suspended (приостановлено)

Не допускает значения NULL.
command nvarchar(32) Тип выполняемой в данный момент команды. Основные типы команд:

SELECT
ВСТАВИТЬ
UPDATE
DELETE
BACKUP LOG
BACKUP DATABASE
DBCC
FOR

Текст запроса можно получить с sys.dm_exec_sql_text помощью соответствующего sql_handle запроса. Внутренние системные процессы устанавливают команду в соответствии с выполняемой задачей. Например:

LOCK MONITOR
CHECKPOINTLAZY;
WRITER.

Не допускает значения NULL.
sql_handle varbinary(64) Токен, однозначно определяющий пакет или хранимую процедуру, частью которой является запрос. Допускает значение NULL.
statement_start_offset int Начальная позиция выполняемой в настоящее время инструкции для выполняющегося пакета или сохраняемого объекта, в байтах, начиная с 0. Может применяться вместе с функциями динамического управления sql_handle, statement_end_offset и sys.dm_exec_sql_text для получения исполняемой в настоящий момент инструкции для запроса. Допускает значение NULL.
statement_end_offset int Конечная позиция выполняемой в настоящее время инструкции для выполняющегося пакета или сохраняемого объекта, в байтах, начиная с 0. Может применяться вместе с функциями динамического управления sql_handle, statement_start_offset и sys.dm_exec_sql_text для получения исполняемой в настоящий момент инструкции для запроса. Допускает значение NULL.
plan_handle varbinary(64) Токен, однозначно определяющий план выполнения запроса для пакета, который выполняется в данный момент. Допускает значение NULL.
database_id smallint Идентификатор базы данных, к которой выполняется запрос. Не допускает значения NULL.

В База данных SQL Azure значения уникальны в одной базе данных или эластичном пуле, но не в логическом сервере.
user_id int Идентификатор пользователя, отправившего данный запрос. Не допускает значения NULL.
connection_id uniqueidentifier Идентификатор соединения, по которому поступил запрос. Допускает значение NULL.
blocking_session_id smallint Идентификатор сеанса, блокирующего данный запрос. Если этот столбец имеет NULL значение или 0запрос не блокируется, или сведения о сеансе блокирующего сеанса недоступны (или не могут быть идентифицированы). Дополнительные сведения см. в статье Общие сведения о проблемах, связанных с блокировкой SQL Server, и их устранении.

-2 = Блокирующий ресурс принадлежит потерянной распределенной транзакции.

-3 = Блокирующий ресурс принадлежит отложенной транзакции восстановления.

-4 = session_id владельца блокирующей блокировки не удалось определить в настоящее время из-за внутренних переходов состояния блокировки.

-5 = session_id Не удалось определить владельца блокировки блокировки, так как он не отслеживается для этого типа блокировки (например, для блокировки SH).

Само по себе blocking_session_id -5 не указывает на проблему производительности. -5 является признаком того, что сеанс ожидает завершения асинхронного действия. Прежде чем -5 было введено, тот же сеанс будет отображаться blocking_session_id 0, даже если он все еще находится в состоянии ожидания.

В зависимости от рабочей нагрузки blocking_session_id = -5 наблюдение может быть общим вхождением.
wait_type nvarchar(60) Если запрос в настоящий момент блокирован, в столбце содержится тип ожидания. Допускает значение NULL.

Сведения о типах ожиданий см. в статье sys.dm_os_wait_stats (Transact-SQL).
wait_time int Если запрос в настоящий момент блокирован, в столбце содержится продолжительность текущего ожидания (в миллисекундах). Не допускает значения NULL.
last_wait_type nvarchar(60) Если запрос был блокирован ранее, в столбце содержится тип последнего ожидания. Не допускает значения NULL.
wait_resource nvarchar(256) Если запрос в настоящий момент блокирован, в столбце указан ресурс, освобождения которого ожидает запрос. Не допускает значения NULL.
open_transaction_count int Число транзакций, открытых для данного запроса. Не допускает значения NULL.
open_resultset_count int Число результирующих наборов, открытых для данного запроса. Не допускает значения NULL.
transaction_id bigint Идентификатор транзакции, в которой выполняется запрос. Не допускает значения NULL.
context_info varbinary(128) Значение CONTEXT_INFO сеанса. Допускает значение NULL.
percent_complete real Процент завершения работы для следующих команд.

ALTER INDEX REORGANIZE
AUTO_SHRINK параметр с ALTER DATABASE
BACKUP DATABASE
DBCC CHECKDB
DBCC CHECKFILEGROUP
DBCC CHECKTABLE
DBCC INDEXDEFRAG
DBCC SHRINKDATABASE
DBCC SHRINKFILE
RECOVERY
RESTORE DATABASE
ROLLBACK
TDE ENCRYPTION

Не допускает значения NULL.
estimated_completion_time bigint Только для внутреннего использования. Не допускает значения NULL.
cpu_time int Время ЦП (в миллисекундах), затраченное на выполнение запроса. Не допускает значения NULL.
total_elapsed_time int Общее время, истекшее с момента поступления запроса (в миллисекундах). Не допускает значения NULL.
scheduler_id int Идентификатор планировщика, который планирует данный запрос. Допускает значение NULL.
task_address varbinary(8) Адрес блока памяти, выделенного для задачи, связанной с этим запросом. Допускает значение NULL.
reads bigint Число операций чтения, выполненных данным запросом. Не допускает значения NULL.
writes bigint Число операций записи, выполненных данным запросом. Не допускает значения NULL.
logical_reads bigint Число логических операций чтения, выполненных данным запросом. Не допускает значения NULL.
text_size int Установка параметра TEXTSIZE для данного запроса. Не допускает значения NULL.
language nvarchar(128) Установка языка для данного запроса. Допускает значение NULL.
date_format nvarchar(3) Установка параметра DATEFORMAT для данного запроса. Допускает значение NULL.
date_first smallint Установка параметра DATEFIRST для данного запроса. Не допускает значения NULL.
quoted_identifier bit 1 = Параметр QUOTED_IDENTIFIER для запроса включен (ON). В противном случае возвращается 0.

Не допускает значения NULL.
arithabort bit 1 = Параметр ARITHABORT для запроса включен (ON). В противном случае возвращается 0.

Не допускает значения NULL.
ansi_null_dflt_on bit 1 = Параметр ANSI_NULL_DFLT_ON для запроса включен (ON). В противном случае возвращается 0.

Не допускает значения NULL.
ansi_defaults bit 1 = Параметр ANSI_DEFAULTS для запроса включен (ON). В противном случае возвращается 0.

Не допускает значения NULL.
ansi_warnings bit 1 = Параметр ANSI_WARNINGS для запроса включен (ON). В противном случае возвращается 0.

Не допускает значения NULL.
ansi_padding bit 1 = Параметр ANSI_PADDING для запроса включен (ON).

В противном случае возвращается 0.

Не допускает значения NULL.
ansi_nulls bit 1 = Параметр ANSI_NULLS для запроса включен (ON). В противном случае возвращается 0.

Не допускает значения NULL.
concat_null_yields_null bit 1 = Параметр CONCAT_NULL_YIELDS_NULL для запроса включен (ON). В противном случае возвращается 0.

Не допускает значения NULL.
transaction_isolation_level smallint Уровень изоляции, с которым создана транзакция для данного запроса. Не допускает значения NULL.
0 = не указан;
1 = ReadUncommitted
2 = читать зафиксированные;
3 = повторяемые результаты;
4 = сериализуемые;
5 = моментальный снимок.
lock_timeout int Время ожидания блокировки для данного запроса (в миллисекундах). Не допускает значения NULL.
deadlock_priority int Значение параметра DEADLOCK_PRIORITY для данного запроса. Не допускает значения NULL.
row_count bigint Число строк, возвращенных клиенту по данному запросу. Не допускает значения NULL.
prev_error int Последняя ошибка, происшедшая при выполнении запроса. Не допускает значения NULL.
nest_level int Текущий уровень вложенности кода, выполняемого для данного запроса. Не допускает значения NULL.
granted_query_memory int Число страниц, выделенных для выполнения поступившего запроса. Не допускает значения NULL.
executing_managed_code bit Указывает, выполняет ли данный запрос в настоящее время код объекта среды CLR (например, процедуры, типа или триггера). Этот флаг установлен в течение всего времени, когда объект среды CLR находится в стеке, даже когда из среды вызывается Transact-SQL. Не допускает значения NULL.
group_id int Идентификатор группы рабочей нагрузки, которой принадлежит этот запрос. Не допускает значения NULL.
query_hash binary(8) Двоичное хэш-значение рассчитывается для запроса и используется для идентификации запросов с аналогичной логикой. Можно использовать хэш запроса для определения использования статистических ресурсов для запросов, которые отличаются только своими литеральными значениями.
query_plan_hash binary(8) Двоичное хэш-значение рассчитывается для плана выполнения запроса и используется для идентификации аналогичных планов выполнения запросов. Можно использовать хэш плана запроса для нахождения совокупной стоимости запросов со схожими планами выполнения.
statement_sql_handle varbinary(64) Область применения: SQL Server 2014 (12.x) и более поздних версий.

sql_handle отдельного запроса.

Этот столбец имеет значение NULL, если хранилище запросов не включено для базы данных.
statement_context_id bigint Область применения: SQL Server 2014 (12.x) и более поздних версий.

Необязательный внешний ключ sys.query_context_settings.

Этот столбец имеет значение NULL, если хранилище запросов не включено для базы данных.
dop int Область применения: SQL Server 2016 (13.x) и более поздних версий.

Степень параллелизма данного запроса.
parallel_worker_count int Область применения: SQL Server 2016 (13.x) и более поздних версий.

Число зарезервированных параллельных рабочих ролей, если это параллельный запрос.
external_script_request_id uniqueidentifier Область применения: SQL Server 2016 (13.x) и более поздних версий.

Идентификатор запроса внешнего скрипта, связанный с текущим запросом.
is_resumable bit Область применения: SQL Server 2017 (14.x) и более поздних версий.

Указывает, является ли запрос операцией возобновляемого индекса.
page_resource binary(8) Область применения: SQL Server 2019 (15.x)

8-байтовое шестнадцатеричное представление ресурса страницы, если столбец wait_resource содержит страницу. Дополнительные сведения см. в статье sys.fn_PageResCracker.
page_server_reads bigint Область применения: уровень службы "Гипермасштабирование" в Базе данных SQL Azure

Число операций чтения сервера страниц, выполненных данным запросом. Не допускает значения NULL.
dist_statement_id uniqueidentifier Область применения: SQL Server 2022 и более поздних версий, База данных SQL Azure, Управляемый экземпляр SQL Azure, Azure Synapse Analytics (только бессерверные пулы) и Microsoft Fabric

Уникальный идентификатор инструкции для отправленного запроса. Не допускает значения NULL.

Замечания

Чтобы выполнить код, внешний по отношению к SQL Server (например, расширенную хранимую процедуру или распределенный запрос), поток должен выйти из-под управления планировщика, работающего в режиме без вытеснения. Для этого исполнитель переходит в режим с вытеснением. Значения времени, возвращаемые этим динамическим административным представлением, не включают время, затраченное в режиме с вытеснением.

При выполнении параллельных запросов в построчном режиме SQL Server назначает рабочий поток для координации рабочих потоков, ответственных за выполнение назначенных им задач. В этом динамическом административном представлении для запроса отображается только координирующий поток. Столбцы reads, writes, logical_reads и row_count не обновляются для координирующего потока. Столбцы wait_type, wait_time, last_wait_type, wait_resource и granted_query_memory обновляются только для координирующего потока. Дополнительные сведения см. в статье Руководство по архитектуре потоков и задач.

Столбец wait_resource содержит аналогичную информацию resource_description в sys.dm_tran_locks (Transact-SQL), но форматируется по-другому.

Разрешения

Если у пользователя есть VIEW SERVER STATE разрешение на сервере, пользователь видит все выполняемые сеансы в экземпляре SQL Server; в противном случае пользователь видит только текущий сеанс. Разрешение VIEW SERVER STATE нельзя предоставить в Базе данных SQL Azure, поэтому представление sys.dm_exec_requests всегда ограничено текущим подключением.

В сценариях группы доступности, если для вторичной реплики задано только намерение чтения, подключение к вторичной группе доступности должно указать намерение приложения в строка подключения параметрах путем добавленияapplicationintent=readonly. В противном случае проверка sys.dm_exec_requests доступа не передается для баз данных в группе доступности, даже если VIEW SERVER STATE разрешение присутствует.

Для SQL Server 2022 (16.x) и более поздних sys.dm_exec_requests версий требуется разрешение VIEW SERVER PERFORMANCE STATE на сервере.

Примеры

А. Поиск текста запроса для выполняемого пакета

В следующем примере выполняется запрос sys.dm_exec_requests для поиска необходимого запроса и из его результата копируется sql_handle.

SELECT * FROM sys.dm_exec_requests;
GO

Затем для получения текста инструкции используйте скопированный sql_handle с помощью системной функции sys.dm_exec_sql_text(sql_handle).

SELECT * FROM sys.dm_exec_sql_text(< copied sql_handle >);
GO

B. Поиск всех блокировок, в которых выполняется пакет

В следующем примере выполняется запрос sys.dm_exec_requests для поиска необходимого пакета и из результата копируется transaction_id.

SELECT * FROM sys.dm_exec_requests;
GO

Затем для получения сведений о блокировке используйте скопированный transaction_id с помощью системной функции sys.dm_tran_locks.

SELECT * FROM sys.dm_tran_locks
WHERE request_owner_type = N'TRANSACTION'
    AND request_owner_id = < copied transaction_id >;
GO

В. Поиск всех заблокированных в настоящее время запросов

В следующем примере выполняется запрос sys.dm_exec_requests для поиска сведений о заблокированных запросах.

SELECT session_id,
    status,
    blocking_session_id,
    wait_type,
    wait_time,
    wait_resource,
    transaction_id
FROM sys.dm_exec_requests
WHERE status = N'suspended';
GO

D. Заказ существующих запросов по ЦП

SELECT
    [req].[session_id],
    [req].[start_time],
    [req].[cpu_time] AS [cpu_time_ms],
    OBJECT_NAME([ST].[objectid], [ST].[dbid]) AS [ObjectName],
    SUBSTRING(
        REPLACE(
            REPLACE(
                SUBSTRING(
                    [ST].[text], ([req].[statement_start_offset] / 2) + 1,
                    ((CASE [req].[statement_end_offset]
                            WHEN -1 THEN DATALENGTH([ST].[text])
                            ELSE [req].[statement_end_offset]
                        END - [req].[statement_start_offset]
                        ) / 2
                    ) + 1
                ), CHAR(10), ' '
            ), CHAR(13), ' '
        ), 1, 512
    ) AS [statement_text]
FROM
    [sys].[dm_exec_requests] AS [req]
    CROSS APPLY [sys].dm_exec_sql_text([req].[sql_handle]) AS [ST]
ORDER BY
    [req].[cpu_time] DESC;
GO