共用方式為


sys.dm_os_waiting_tasks (Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure 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_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> 可以是:

    • 對於 DATABASEdatabaselock subresource=<databaselock-subresource> dbid=<db-id>
    • 對於 FILEfilelock fileid=<file-id> subresource=<filelock-subresource> dbid=<db-id>
    • 對於 OBJECTobjectlock lockPartition=<lock-partition-id> objid=<obj-id> subresource=<objectlock-subresource> dbid=<db-id>
    • 對於 PAGEpagelock fileid=<file-id> pageid=<page-id> dbid=<db-id> subresource=<pagelock-subresource>
    • 對於 Keykeylock hobtid=<hobt-id> dbid=<db-id>
    • 對於 EXTENTextentlock fileid=<file-id> pageid=<page-id> dbid=<db-id>
    • 對於 RIDridlock fileid=<file-id> pageid=<page-id> dbid=<db-id>
    • 對於 APPLICATIONapplicationlock hash=<hash> databasePrincipalId=<role-id> dbid=<db-id>
    • 對於 METADATAmetadatalock subresource=<metadata-subresource> classid=<metadatalock-description> dbid=<db-id>
    • 對於 HOBThobtlock hobtid=<hobt-id> subresource=<hobt-subresource> dbid=<db-id>
    • 對於 ALLOCATION_UNITallocunitlock 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 (交易) 資源擁有者

啟用 最佳化鎖定 時發生:

  • xactlockxactlock 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 資料庫基本、S0S1 服務目標上,以及彈性集區中的資料庫,需要伺服器系統管理員帳戶、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