sys.dm_os_waiting_tasks (Transact-SQL)
Применимо: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure azure Synapse Analytics Analytics Platform System (PDW)
Возвращает сведения об очереди задач, ожидающих освобождения определенного ресурса. Дополнительные сведения о задачах см. в руководстве по архитектуре потоков и задач.
Примечание.
Чтобы вызвать это из Azure Synapse Analytics или Analytics Platform System (PDW), используйте имя sys.dm_pdw_nodes_os_waiting_tasks
. Этот синтаксис не поддерживается бессерверным пулом SQL в Azure Synapse Analytics.
Имя столбца | Тип данных | Description |
---|---|---|
waiting_task_address |
varbinary(8) | Адрес ожидающей задачи. |
session_id |
smallint | Идентификатор сеанса, связанного с этой задачей. |
exec_context_id |
int | Идентификатор контекста выполнения, связанного с этой задачей. |
wait_duration_ms |
bigint | Общее время ожидания для этого типа ожиданий в миллисекундах. Это время включает в себя signal_wait_time . |
wait_type |
nvarchar(60) | Имя типа ожидания. |
resource_address |
varbinary(8) | Адрес ресурса, освобождения которого ожидает задача. |
blocking_task_address |
varbinary(8) | Задача, которая в настоящий момент блокирует этот ресурс. |
blocking_session_id |
smallint | Идентификатор сеанса, блокирующего данный запрос. Если этот столбец NULL указан, запрос не блокируется или сведения о сеансе блокирующего сеанса недоступны (или не могут быть идентифицированы).-2 = блокирующий ресурс принадлежит потерянным распределенным транзакциям.-3 = блокирующий ресурс принадлежит отложенной транзакции восстановления.-4 = session_id Не удалось определить владельца блокировки из-за внутренних переходов состояния блокировки. |
blocking_exec_context_id |
int | Идентификатор контекста выполнения блокирующей задачи. |
resource_description |
nvarchar(3072) | Описание используемого ресурса. Дополнительные сведения см. в resource_description столбце. |
pdw_node_id |
int | Область применения: Azure Synapse Analytics, Analytics Platform System (PDW) Идентификатор узла, на который находится данное распределение. |
Столбец resource_description
Столбец resource_description имеет следующие возможные значения.
Владелец ресурса пула потоков:
- threadpool id=scheduler<hex-address>
Владелец ресурса параллельного запроса:
- exchangeEvent id={Port|Pipe}<hex-address> WaitType=<exchange-wait-type> nodeId=<exchange-node-id>
Тип Exchange-wait::
- e_waitNone
- e_waitPipeNewRow
- e_waitPipeGetRow
- e_waitSynchronizeConsumerOpen
- e_waitPortOpen
- e_waitPortClose
- e_waitRange
Блокировка владельца ресурса:
<type-specific-description> id=lock<lock-hex-address> mode=<mode> associatedObjectId=<associated-obj-id>
<type-specific-description>
может быть:- Для БАЗЫ ДАННЫХ:
databaselock subresource=<databaselock-subresource> dbid=<db-id>
- Для ФАЙЛА:
filelock fileid=<file-id> subresource=<filelock-subresource> dbid=<db-id>
- Для ОБЪЕКТА:
objectlock lockPartition=<lock-partition-id> objid=<obj-id> subresource=<objectlock-subresource> dbid=<db-id>
- Для СТРАНИЦЫ:
pagelock fileid=<file-id> pageid=<page-id> dbid=<db-id> subresource=<pagelock-subresource>
- Для ключа:
keylock hobtid=<hobt-id> dbid=<db-id>
- Для ЭКСТЕНТ:
extentlock fileid=<file-id> pageid=<page-id> dbid=<db-id>
- Для RID:
ridlock fileid=<file-id> pageid=<page-id> dbid=<db-id>
- Для ПРИЛОЖЕНИЯ:
applicationlock hash=<hash> databasePrincipalId=<role-id> dbid=<db-id>
- Для метаданных:
metadatalock subresource=<metadata-subresource> classid=<metadatalock-description> dbid=<db-id>
- Для HOBT:
hobtlock hobtid=<hobt-id> subresource=<hobt-subresource> dbid=<db-id>
- Для ALLOCATION_UNIT:
allocunitlock hobtid=<hobt-id> subresource=<alloc-unit-subresource> dbid=<db-id>
- Для БАЗЫ ДАННЫХ:
<mode>
может быть: Sch-S, Sch-M, S, U, X, IS, IU, IX, SIU, SIX, UIX, BU, RangeS-S, RangeS-U, RangeI-N, RangeI-S, RangeI-U, RangeI-X, RangeX-U, RangeX-U, RangeX-X, RangeX-X
Внешний владелец ресурса:
- Внешний
ExternalResource=<wait-type>
Универсальный владелец ресурса:
- TransactionMutex
TransactionInfo Workspace=<workspace-id>
- Mutex
- CLRTaskJoin
- CLRMonitorEvent
- CLRRWLockEvent
- resourceWait
Владелец ресурса блокировки:
<db-id>:<file-id>:<page-in-file>
<GUID>
<latch-class> (<latch-address>)
Владелец ресурса XACT (транзакция) возникает при включенной оптимизированной блокировке :
xactlock
:xactlock xdesIdLow=<xdesIdLow> xdesIdHigh=<xdesIdHigh> dbid=<dbid> id=<resource id> mode=<mode> UnderlyingResource (<keylock|ridlock>) hobtId=<hobtId> dbid=<dbid>
Разрешения
На SQL Server и управляемом экземпляре SQL необходимо разрешение VIEW SERVER STATE
.
Для целей службы База данных SQL Basic, S0 и S1, а также для баз данных в эластичных пулах, учетной записи администратора сервера, учетной записи администратора Microsoft Entra или членства в ##MS_ServerStateReader##
роли сервера требуется. Для всех остальных целей обслуживания базы данных SQL требуется разрешение VIEW DATABASE STATE
в базе данных или членство в роли сервера ##MS_ServerStateReader##
.
Разрешения для SQL Server 2022 и более поздних версий
Требуется разрешение VIEW SERVER PERFORMANCE STATE на сервере.
Примеры
А. Определение задач из заблокированных сеансов
SELECT * FROM sys.dm_os_waiting_tasks
WHERE blocking_session_id IS NOT NULL;
B. Просмотр задач ожидания на подключение
SELECT st.text AS [SQL Text], c.connection_id, w.session_id,
w.wait_duration_ms, w.wait_type, w.resource_address,
w.blocking_session_id, w.resource_description, c.client_net_address, c.connect_time
FROM sys.dm_os_waiting_tasks AS w
INNER JOIN sys.dm_exec_connections AS c ON w.session_id = c.session_id
CROSS APPLY (SELECT * FROM sys.dm_exec_sql_text(c.most_recent_sql_handle)) AS st
WHERE w.session_id > 50 AND w.wait_duration_ms > 0
ORDER BY c.connection_id, w.session_id;
GO
C. Просмотр задач ожидания для всех пользовательских процессов с дополнительными сведениями
SELECT 'Waiting_tasks' AS [Information], owt.session_id,
owt.wait_duration_ms, owt.wait_type, owt.blocking_session_id,
owt.resource_description, es.program_name, est.text,
est.dbid, eqp.query_plan, er.database_id, es.cpu_time,
es.memory_usage*8 AS memory_usage_KB
FROM sys.dm_os_waiting_tasks owt
INNER JOIN sys.dm_exec_sessions es ON owt.session_id = es.session_id
INNER JOIN sys.dm_exec_requests er ON es.session_id = er.session_id
OUTER APPLY sys.dm_exec_sql_text (er.sql_handle) est
OUTER APPLY sys.dm_exec_query_plan (er.plan_handle) eqp
WHERE es.is_user_process = 1
ORDER BY owt.session_id;
GO