Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к:SQL Server
База данных Azure SQL
Управляемый экземпляр Azure SQL
Azure Synapse Analytics
Система платформы аналитики (PDW)
Конечная точка SQL аналитики в Microsoft Fabric
Хранилище в Microsoft Fabric
База данных SQL в Microsoft Fabric
Возвращает сведения о каждом запросе, который выполняется в SQL Server. Дополнительные сведения о запросах см. в руководстве по архитектуре потоков и задач.
Note
Чтобы вызвать это из выделенного пула SQL в Azure Synapse Analytics или Analytics Platform System (PDW), см. sys.dm_pdw_exec_requests. Для бессерверного пула SQL или Microsoft Fabric используйте sys.dm_exec_requests.
| Название столбца | Тип данных | Описание |
|---|---|---|
session_id |
smallint | Идентификатор сеанса, к которому относится данный запрос. Не допускает значения NULL. |
request_id |
int | Идентификатор запроса. Уникален в контексте сеанса. Не допускает значения NULL. |
start_time |
datetime | Метка времени поступления запроса. Не допускает значения NULL. |
status |
nvarchar(30) | Состояние запроса. Может использоваться одно из следующих значений: фон откат работает готово к запуску спящий режим приостановлено Не допускает значения NULL. |
command |
nvarchar(32) | Тип выполняемой в данный момент команды. Основные типы команд: SELECT INSERT UPDATE DELETE BACKUP ЖУРНАЛ BACKUP DATABASE DBCC ДЛЯ Текст запроса можно получить с sys.dm_exec_sql_text помощью соответствующего sql_handle запроса. Внутренние системные процессы устанавливают команду в соответствии с выполняемой задачей. Например:БЛОКИРОВКА МОНИТОРА 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_id0, даже если он все еще находится в состоянии ожидания.В зависимости от рабочей нагрузки blocking_session_id = -5 наблюдение может быть общим вхождением. |
wait_type |
nvarchar(60) | Если запрос в настоящий момент блокирован, в столбце содержится тип ожидания. Допускает значение NULL. Если запрос использует несколько задач, например из-за параллелизма внутри запроса, задачи могут ждать разных ресурсов с различными типами ожидания. Задача может быть заблокирована, а другие задачи того же запроса продолжают выполняться. Чтобы найти тип ожидания и длительность каждой задачи, и укажите, блокируется ли она, используйте sys.dm_os_waiting_tasks. Сведения о типах ожиданий см. в sys.dm_os_wait_stats. |
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 REORGANIZEAUTO_SHRINK параметр с ALTER DATABASEBACKUP DATABASEDBCC CHECKDBDBCC CHECKFILEGROUPDBCC CHECKTABLEDBCC INDEXDEFRAGDBCC SHRINKDATABASEDBCC SHRINKFILERECOVERYRESTORE DATABASEROLLBACKTDE 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 ВКЛЮЧЕНО для запроса. В противном случае возвращается 0. Не допускает значения NULL. |
arithabort |
bit | 1 = ARITHABORT настройка ВКЛЮЧЕНА для запроса. В противном случае возвращается 0. Не допускает значения NULL. |
ansi_null_dflt_on |
bit | 1 = ANSI_NULL_DFLT_ON настройка ВКЛЮЧЕНА для запроса. В противном случае возвращается 0. Не допускает значения NULL. |
ansi_defaults |
bit | 1 = ANSI_DEFAULTS настройка ВКЛЮЧЕНА для запроса. В противном случае возвращается 0. Не допускает значения NULL. |
ansi_warnings |
bit | 1 = ANSI_WARNINGS настройка ВКЛЮЧЕНА для запроса. В противном случае возвращается 0. Не допускает значения NULL. |
ansi_padding |
bit | 1 = ANSI_PADDING настройка ВКЛЮЧЕНА для запроса. В противном случае возвращается 0. Не допускает значения NULL. |
ansi_nulls |
bit | 1 = ANSI_NULLS настройка ВКЛЮЧЕНА для запроса. В противном случае возвращается 0. Не допускает значения NULL. |
concat_null_yields_null |
bit | 1 = CONCAT_NULL_YIELDS_NULL настройка ВКЛЮЧЕНА для запроса. В противном случае возвращается 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 , но форматируется по-другому.
Permissions
Если у пользователя есть 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 на сервере.
Examples
А. Поиск текста запроса для выполняемого пакета
В следующем примере используется 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. Отображение активных запросов
В следующем примере показаны все выполняемые в настоящее время запросы в хранилище данных SQL Server, за исключением собственного сеанса (@@SPID). Он используется CROSS APPLY для sys.dm_exec_sql_text получения полного текста запроса для каждого запроса и соединения с sys.dm_exec_sessions включением пользователей любой информации о узле. Фильтр session_id <> @@SPID гарантирует, что в результатах не отображается собственный запрос.
SELECT r.session_id,
r.status,
r.command,
r.start_time,
r.total_elapsed_time / 1000.00 AS elapsed_seconds,
r.cpu_time / 1000.00 AS cpu_seconds,
r.reads,
r.writes,
r.logical_reads,
r.row_count,
s.login_name,
s.host_name,
t.text AS query_text
FROM sys.dm_exec_requests AS r
INNER JOIN sys.dm_exec_sessions AS s
ON r.session_id = s.session_id
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS t
WHERE r.session_id <> @@SPID
ORDER BY r.start_time DESC;
C. Поиск всех блокировок, в которых выполняется пакет
В следующем примере выполняется запрос 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
D. Поиск всех заблокированных в настоящее время запросов
В следующем примере выполняется запрос 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
E. Заказ существующих запросов по ЦП
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, и их устранении