sys.dm_exec_requests (Transact-SQL)
Область применения:SQL Server (все поддерживаемые версии)
База данных SQL Azure
Azure 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
См. также раздел
- Динамические административные представления и функции
- Динамические административные представления и соответствующие функции, связанные с выполнением
- sys.dm_os_memory_clerks
- sys.dm_os_sys_info
- sys.dm_exec_query_memory_grants
- sys.dm_exec_query_plan
- sys.dm_exec_sql_text
- SQL Server, объект SQL Statistics
- Руководство по архитектуре обработки запросов
- Руководство по архитектуре потоков и задач