対象者:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure 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_waitNonee_waitPipeNewRowe_waitPipeGetRowe_waitSynchronizeConsumerOpene_waitPortOpene_waitPortClosee_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>
汎用リソース所有者
-
TransactionMutexTransactionInfo Workspace=<workspace-id> MutexCLRTaskJoinCLRMonitorEventCLRRWLockEventresourceWait
ラッチ リソース所有者
<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 Basic、 S0、 および 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