sys.dm_os_waiting_tasks (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

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

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> 次の場合があります。
      • DATABA の場合Standard Edition: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 Basic、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