sys.dm_os_waiting_tasks (Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics 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>
    • <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 資料庫基本、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