次の方法で共有


sys.dm_os_waiting_tasks (Transact-SQL)

適用対象: SQL Server Azure SQL データベース Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

何らかのリソースを待機しているタスクの待機キューに関する情報を返します。 タスクの詳細については、「 Thread and Task Architecture Guideを参照してください。

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 = session_id 内部ラッチ状態遷移のため、ブロッキング ラッチ所有者を特定できませんでした。
blocking_exec_context_id int ブロック タスクの実行コンテキストの ID。
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>
      • アプリケーションの場合: applicationlock hash=<hash> databasePrincipalId=<role-id> dbid=<db-id>
      • メタデータの場合: 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 Managed Instance では、VIEW SERVER STATE アクセス許可が必要です。

SQL Database の BasicS0S1 サービス対象、および Elastic Pool のデータベースの場合、サーバー管理者アカウント、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