適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Microsoft Fabric SQL Database
何らかのリソースを待機しているタスクの待機キューに関する情報を返します。 タスクの詳細については、「 スレッドとタスクのアーキテクチャ ガイド」を参照してください。
Note
Azure Synapse Analyticsから呼ぶには、sys.dm_pdw_nodes_os_waiting_tasksという名前を使ってください。 この構文は、Azure Synapse Analytics のサーバーレス SQL プールでサポートされていません。
| 列名 | データの種類 | Description |
|---|---|---|
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 |
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>
Permissions
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##サーバー ロールのメンバーシップが必要です。 他のすべての SQL Database サービス目標では、データベースに対する VIEW DATABASE STATE アクセス許可または ##MS_ServerStateReader## サーバー ロールのメンバーシップのいずれかが必要です。
Examples
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