sys.dm_os_waiting_tasks (Transact-SQL)

適用于:SQL Server (所有支援的版本) Azure SQL Database 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 = 由於內部閂鎖狀態轉換,而無法判斷封鎖閂鎖擁有者的工作階段識別碼。
blocking_exec_coNtext_id int 封鎖工作的執行內容識別碼。
resource_description Nvarchar (3072) 正在耗用的資源描述。 如需詳細資訊,請參閱以下清單。
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>

    • 針對金鑰:keylockhotid= < vaultt-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>

    • 若為「復原」T:foundationtlockhotid= < hot-id > subresource=hot-subresource > dbid= << db-id>

    • 針對 ALLOCATION_UNIT:allocunitlock foundationtid=foundationt-id > subresource= << alloc-unit-subresource > dbid= < db-id>

    <模式 > 可以是:

    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

外部資源擁有者:

  • External ExternalResource= < wait-type>

一般資源擁有者:

  • TransactionMutex TransactionInfo Workspace= < workspace-id>

  • Mutex

  • CLRTaskJoin

  • CLRMonitorEvent

  • CLRRWLockEvent

  • resourceWait

閂鎖資源擁有者:

  • <db-id > : < file-id > : < page-in-file>

  • <GUID>

  • <閂鎖類別 > (< 閂鎖位址 >)

權限

在SQL Server和SQL 受管理執行個體上,需要 VIEW SERVER STATE 許可權。

在SQL Database基本S0S1服務目標上,以及彈性區中的資料庫,需要伺服器管理員帳戶、Azure Active Directory 系統管理員帳戶或伺服器角色的成員 ##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 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

另請參閱

SQL Server 作業系統相關的動態管理檢視 (Transact-SQL)
執行緒和工作架構指南