sys.dm_os_waiting_tasks (Transact-SQL)
适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics Platform System (PDW)
返回有关正在等待某些资源的任务的等待队列的信息。 有关任务的详细信息,请参阅 “线程和任务体系结构指南”。
注意
若要从 Azure Synapse Analytics 或 Analytics 平台系统(PDW)调用此名称,请使用名称 sys.dm_pdw_nodes_os_waiting_tasks
。 Azure Synapse Analytics 中的无服务器 SQL 池不支持此语法。
列名称 | 数据类型 | 描述 |
---|---|---|
waiting_task_address |
varbinary(8) | 等待任务的地址。 |
session_id |
smallint | 与任务关联的会话的 ID。 |
exec_context_id |
int | 与任务关联的执行上下文的 ID。 |
wait_duration_ms |
bigint | 此等待类型的总等待时间(毫秒)。 这次是独占的 signal_wait_time 。 |
wait_type |
nvarchar(60) | 等待类型的名称。 |
resource_address |
varbinary(8) | 任务等待的资源的地址。 |
blocking_task_address |
varbinary(8) | 当前持有此资源的任务。 |
blocking_session_id |
smallint | 正在阻塞请求的会话的 ID。 如果此列 NULL 是,则请求不会被阻止,或者阻止会话的会话信息不可用(或无法识别)。-2 = 阻塞资源由孤立分布式事务拥有。-3 = 阻塞资源由延迟恢复事务拥有。-4 = session_id 由于内部闩锁状态转换,无法确定阻塞闩锁所有者。 |
blocking_exec_context_id |
int | 正在阻塞的任务的执行上下文 ID。 |
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-type:
- 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>
可以是:- 对于 DATABASE:
databaselock subresource=<databaselock-subresource> dbid=<db-id>
- 对于 FILE:
filelock fileid=<file-id> subresource=<filelock-subresource> dbid=<db-id>
- 对于 OBJECT:
objectlock lockPartition=<lock-partition-id> objid=<obj-id> subresource=<objectlock-subresource> dbid=<db-id>
- 对于 PAGE:
pagelock fileid=<file-id> pageid=<page-id> dbid=<db-id> subresource=<pagelock-subresource>
- 对于密钥:
keylock hobtid=<hobt-id> dbid=<db-id>
- 对于 EXTENT:
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>
- 对于 DATABASE:
<mode>
可以是:Sch-S、Sch-M、S、U、X、IS、IU、IX、SIU、IX、SIU、SIX、UIX、BU、RangeS-S、RangeS-U、RangeI-N、RangeI-S、RangeI-U、RangeI-X、RangeX-U、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 数据库“基本”、“S0”和“S1”服务目标中,对于“弹性池”中的数据库,服务器管理员帐户、Microsoft Entra 管理员帐户或 ##MS_ServerStateReader##
服务器角色中的成员身份为必填项。 对于所有其他 SQL 数据库服务目标,需要数据库的 VIEW DATABASE STATE
权限或 ##MS_ServerStateReader##
服务器角色中的成员身份。
SQL Server 2022 及更高版本的权限
要求对服务器具有 VIEW SERVER PERFORMANCE STATE 权限。
示例
A. 从阻止的会话中识别任务
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