适用于: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) | 等待类型的名称。 有关详细信息,请参阅 sys.dm_os_wait_stats。 |
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 和分析平台系统(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_waitNonee_waitPipeNewRowe_waitPipeGetRowe_waitSynchronizeConsumerOpene_waitPortOpene_waitPortClosee_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> - 对于
Key: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> - 对于
APPLICATION:applicationlock hash=<hash> databasePrincipalId=<role-id> dbid=<db-id> - 对于
METADATA: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-、RangeX-U、RangeX-X
外部资源所有者
外部 ExternalResource=<wait-type>
通用资源所有者
-
TransactionMutexTransactionInfo Workspace=<workspace-id> MutexCLRTaskJoinCLRMonitorEventCLRRWLockEventresourceWait
闩锁资源所有者
<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 2019 (15.x) 和早期版本需要 VIEW SERVER STATE 权限。
SQL Server 2022 (16.x) 及更高版本以及 SQL Server 和 Azure SQL 托管实例需要 VIEW SERVER PERFORMANCE STATE 对服务器具有权限。
在 Azure SQL 数据库基本、S0 和 S1 服务目标上,对于弹性池中的数据库,需要服务器管理员帐户、Microsoft Entra 管理员帐户或服务器角色的成员##MS_ServerStateReader##身份。 对于所有其他 SQL 数据库服务目标,需要数据库的 VIEW DATABASE STATE 权限或 ##MS_ServerStateReader## 服务器角色中的成员身份。
示例
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 AS owt
INNER JOIN sys.dm_exec_sessions AS es
ON owt.session_id = es.session_id
INNER JOIN sys.dm_exec_requests AS er
ON es.session_id = er.session_id
OUTER APPLY sys.dm_exec_sql_text(er.sql_handle) AS est
OUTER APPLY sys.dm_exec_query_plan(er.plan_handle) AS eqp
WHERE es.is_user_process = 1
ORDER BY owt.session_id;
GO