sys.dm_exec_requests (Transact-SQL)

Область применения:yesSQL Server (все поддерживаемые версии) YesБаза данных SQL Azure yesAzure Synapse Analytics

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

Примечание

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

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

История
Запущен
Готово к запуску
В режиме ожидания
Приостановлена

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

SELECT
INSERT
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.
user_id int Идентификатор пользователя, отправившего данный запрос. Не допускает значение NULL.
connection_id uniqueidentifier Идентификатор соединения, по которому поступил запрос. Допускает значение NULL.
blocking_session_id smallint Идентификатор сеанса, блокирующего данный запрос. Если этот столбец содержит значение NULL или равен 0, то запрос не заблокирован или сведения о сеансе блокировки недоступны (или их нельзя идентифицировать). Дополнительные сведения см. в статье Общие сведения о проблемах, связанных с блокировкой SQL Server, и их устранении.

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

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

-4 = Идентификатор сеанса владельца кратковременной блокировки сейчас не удалось определить из-за переходов между внутренними состояниями кратковременной блокировки.

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

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

В зависимости от рабочей нагрузки возникновение идентификатора -5 для blocking_session_id может быть обычным делом.
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.
Язык 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 = читать незафиксированные;
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 для отдельного запроса.

Этот столбец имеет значение 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.
     

Remarks

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

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

Разрешения

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

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

Примеры

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

В следующем примере выполняется запрос 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  

Б. Поиск всех блокировок, которые содержит выполняемый пакет

В следующем примере выполняется запрос 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  

Г. Упорядочение существующих запросов по ЦП

SELECT 
   req.session_id
   , req.start_time
   , cpu_time 'cpu_time_ms'
   , object_name(st.objectid,st.dbid) 'ObjectName' 
   , substring
      (REPLACE
        (REPLACE
          (SUBSTRING
            (ST.text
            , (req.statement_start_offset/2) + 1
            , (
               (CASE 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 cpu_time desc;
GO

См. также раздел

Дальнейшие действия