次の方法で共有


sys.dm_os_waiting_tasks(Transact-SQL)

対象者:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analyticsアナリティクスプラットフォームシステム(PDW)Microsoft FabricにおけるSQLデータベース

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

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) 待機の種類の名前。 詳細については、「sys.dm_os_wait_stats」を参照してください。
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 and 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>
    • Keyの場合: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>
  • <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 2019 (15.x) 以前のバージョンでは、 VIEW SERVER STATE アクセス許可が必要です。

SQL Server 2022 (16.x) 以降のバージョン、および SQL Server と Azure SQL Managed Instance には、サーバーに対する VIEW SERVER PERFORMANCE STATE アクセス許可が必要です。

Azure SQL Database BasicS0および S1 サービス目標では、 エラスティック プール内のデータベースの場合、 サーバー管理者 アカウント、 Microsoft Entra 管理者 アカウント、または ##MS_ServerStateReader##server ロール のメンバーシップが必要です。 他のすべての 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