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 откат выполняется готово к запуску sleeping 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 = читать незафиксированные; 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
C. Поиск всех заблокированных в настоящее время запросов
В следующем примере выполняется запрос 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
Связанный контент
- Системные динамические административные представления
- Связанные с выполнением динамические административные представления и функции (Transact-SQL)
- sys.dm_os_memory_clerks (Transact-SQL)
- sys.dm_os_sys_info (Transact-SQL)
- sys.dm_exec_query_memory_grants (Transact-SQL)
- sys.dm_exec_query_plan (Transact-SQL)
- sys.dm_exec_sql_text (Transact-SQL)
- SQL Server, объект статистики SQL
- Руководство по архитектуре обработки запросов
- Руководство по архитектуре потоков и задач
- Руководство по блокировке и управлению версиями строк транзакций
- Общие сведения о проблемах, связанных с блокировкой SQL Server, и их устранении