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>
- DATABASE の場合:
<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 サービス対象、および 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