sys.dm_os_waiting_tasks (Transact-SQL)

適用対象:Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) Azure SQL SQL Server (サポートされているすべてのバージョン)

何らかのリソースを待機しているタスクの待機キューに関する情報を返します。 タスクの詳細については、「 スレッドとタスクのアーキテクチャ ガイド」を参照してください。

Note

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 タスクに関連付けられているセッションの ID。
exec_context_id int タスクに関連付けられている実行コンテキストの ID。
wait_duration_ms bigint この待機の種類の合計待機時間 (ミリ秒単位)。 今回は signal_wait_timeを含みます。
wait_type nvarchar(60) 待機の種類の名前。
resource_address varbinary(8) タスクが待機しているリソースのアドレス。
blocking_task_address varbinary(8) 現在このリソースを保持しているタスク
blocking_session_id smallint 要求をブロックしているセッションの ID。 この列が NULL の場合は、要求がブロックされていないか、ブロックしているセッションのセッション情報が使用または識別できません。

-2 = ブロックしているリソースは、孤立した分散トランザクションが所有しています。

-3 = ブロックしているリソースは、遅延復旧トランザクションが所有しています。

-4 = 内部ラッチ状態遷移により、ブロッキング ラッチ所有者のセッション ID を特定できませんでした。
blocking_exec_context_id int ブロック タスクの実行コンテキストの ID。
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>

    • キーの場合: 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>

    <モード> は次のとおりです。

    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>

  • <latch-class> (<latch-address>)

アクセス許可

SQL Server と SQL Managed Instance では、VIEW SERVER STATE アクセス許可が必要です。

SQL Database BasicS0、および S1 のサービス目標、およびエラスティック プール内のデータベースの場合、サーバー管理者アカウント、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)
スレッドおよびタスクのアーキテクチャ ガイド