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


sys.dm_exec_requests (Transact-SQL)

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

ПримечаниеПримечание

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

Имя столбца

Тип данных

Описание

session_id

smallint

Идентификатор сеанса, к которому относится данный запрос. Не допускает значение NULL.

request_id

int

Идентификатор запроса. Уникален в контексте сеанса. Не допускает значение NULL.

start_time

datetime

Отметка времени поступления запроса. Не допускает значение NULL.

status

nvarchar(30)

Состояние запроса. Может иметь одно из следующих значений:

  • Пояснения

  • Выполняется

  • Готов к выполнению

  • В режиме ожидания

  • Приостановлен

Не допускает значение NULL.

command

nvarchar(16)

Тип выполняемой в данный момент команды. Основные типы команд:

  • SELECT

  • INSERT

  • UPDATE

  • DELETE

  • BACKUP LOG

  • BACKUP DATABASE

  • DBCC

  • WAITFOR

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

  • LOCK MONITOR;

  • CHECKPOINTLAZY;

  • WRITER

Не допускает значение NULL.

sql_handle

varbinary(64)

Хэш-карта текста SQL-запроса. Допускаются значения NULL.

statement_start_offset

int

Количество символов в выполняемом в настоящий момент пакете или хранимой процедуре, в которой запущена текущая инструкция. Может применяться вместе с функциями динамического управления sql_handle, statement_end_offset и sys.dm_exec_sql_text для получения исполняемой в настоящий момент инструкции для запроса. Допускаются значения NULL.

statement_end_offset

int

Количество символов в выполняемом в настоящий момент пакете или хранимой процедуре, в которой завершилась текущая инструкция. Может применяться вместе с функциями динамического управления sql_handle, statement_end_offset и sys.dm_exec_sql_text для получения исполняемой в настоящий момент инструкции для запроса. Допускаются значения NULL.

plan_handle

varbinary(64)

Хэш-карта плана выполнения SQL. Допускаются значения NULL.

database_id

smallint

Идентификатор базы данных, к которой выполняется запрос. Не допускает значение NULL.

user_id

int

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

connection_id

uniqueidentifier

Идентификатор соединения, по которому поступил запрос. Допускаются значения NULL.

blocking_session_id

smallint

Идентификатор сеанса, блокирующего запрос. Если этот столбец содержит значение NULL, то запрос не блокирован или сведения о сеансе блокировки недоступны (или не могут быть идентифицированы).

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

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

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

wait_type

nvarchar(60)

Если запрос в настоящий момент блокирован, в столбце содержится тип ожидания. Допускаются значения NULL.

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.

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)

Двоичное хэш-значение рассчитывается для плана выполнения запроса и используется для идентификации аналогичных планов выполнения запросов. Можно использовать хэш плана запроса для нахождения совокупной стоимости запросов со схожими планами выполнения. Дополнительные сведения см. в разделе Поиск и настройка сходных запросов с помощью хэширования запросов и планов запросов.

Разрешения

Требует разрешения VIEW SERVER STATE на сервере.

ПримечаниеПримечание

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

Примеры

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

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