sys.dm_os_waiting_tasks (Transact-SQL)
適用於: SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW)
傳回有關等候某項資源的工作等候佇列資訊。 如需工作的詳細資訊,請參閱 線程和工作架構指南。
注意
若要從 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) | 等候類型的名稱。 |
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-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>
- 針對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>
- 針對 DATABASE:
<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>
一般資源擁有者:
- 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 Database [Basic]、[S0] 和 [S1] 服務目標,以及彈性集區中的資料庫,需要伺服器管理員帳戶、伺服器管理員帳戶、Microsoft Entra 管理員帳戶或 ##MS_ServerStateReader##
伺服器角色的成員資格。 在所有其他 SQL Database 服務目標上,需要資料庫的 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