適用於:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
分析平台系統(PDW)
Microsoft Fabric 中的 SQL 資料庫
傳回有關等候某項資源的工作等候佇列資訊。 如需工作的詳細資訊,請參閱 執行緒和工作架構指南。
注意
若要從 Azure Synapse Analytics 或 Analytics Platform System (PDW) 呼叫此專案,請使用 名稱 sys.dm_pdw_nodes_os_waiting_tasks。 Azure Synapse Analytics 的無伺服器 SQL 集區不支援此語法。
| 資料行名稱 | 資料類型 | 描述 |
|---|---|---|
waiting_task_address |
varbinary(8) | 等候工作的位址。 |
session_id |
smallint | 與這項工作相關聯的工作階段識別碼。 |
exec_context_id |
int | 與這項工作相關聯的執行內容識別碼。 |
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 | 封鎖要求的工作階段識別碼。 如果此數據行為 NULL,則不會封鎖要求,或封鎖會話的會話資訊無法使用(或無法識別)。-2 = 封鎖資源是由孤立的分散式交易所擁有。-3 = 封鎖資源是由延後復原交易所擁有。-4
=
session_id 由於內部閂鎖狀態轉換,無法判斷封鎖閂鎖擁有者。 |
blocking_exec_context_id |
int | 封鎖工作的執行內容標識碼。 |
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>
交換等待類型
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 Database 服務目標上,需要資料庫的 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