sys.dm_os_tasks (Transact-SQL)
適用対象: SQL Server Azure SQL データベース Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
SQL Server のインスタンスでアクティブなタスクごとに 1 行を返します。 タスクは、SQL Server での実行の基本単位です。 タスクの例としては、クエリ、ログイン、ログアウト、ゴースト クリーンアップ アクティビティ、チェックポイント アクティビティ、ログ ライター、並列再実行アクティビティなどのシステム タスクがあります。 タスクの詳細については、「 Thread and Task Architecture Guideを参照してください。
Note
これを Azure Synapse Analytics または Analytics Platform System (PDW) から呼び出すには、 sys.dm_pdw_nodes_os_tasksという名前を使用します。 この構文は、Azure Synapse Analytics のサーバーレス SQL プールでサポートされていません。
列名 | データ型 | 説明 |
---|---|---|
task_address | varbinary(8) | オブジェクトのメモリ アドレス。 |
task_state | nvarchar(60) | タスクの状態です。 DLL は、次のいずれかの場所に置くことができます。 PENDING: ワーカー スレッドを待機しています。 RUNNABLE: 実行可能ですが、クォンタムの受信を待機しています。 RUNNING: 現在スケジューラで実行されています。 SUSPENDED: ワーカーが含まれていますが、イベントを待機しています。 完了: 完了。 SPINLOOP: スピンロックで停止しています。 |
context_switches_count | int | このタスクが完了したスケジューラ コンテキスト スイッチの数。 |
pending_io_count | int | このタスクによって実行される物理 I/O の数。 |
pending_io_byte_count | bigint | このタスクによって実行される I/O の合計バイト数。 |
pending_io_byte_average | int | このタスクによって実行される I/O の平均バイト数。 |
scheduler_id | int | 親スケジューラの ID。 これは、このタスクのスケジューラ情報のハンドルです。 詳細については、「sys.dm_os_schedulers (Transact-SQL)」を参照してください。 |
session_id | smallint | タスクに関連付けられているセッションの ID。 |
exec_context_id | int | タスクに関連付けられている実行コンテキスト ID。 |
request_id | int | タスクの要求の ID。 詳しくは「sys.dm_exec_requests (Transact-SQL)」をご覧ください。 |
worker_address | varbinary(8) | タスクを実行しているワーカーのメモリ アドレス。 NULL = タスクがワーカーの実行を待機しているか、タスクの実行が完了したばかりです。 詳細については、「 sys.dm_os_workers (Transact-SQL)」を参照してください。 |
host_address | varbinary(8) | ホストのメモリ アドレス。 0 = ホスティングはタスクの作成に使用されませんでした。 これは、このタスクの作成に使用されたホストを識別するのに役立ちます。 詳細については、「 sys.dm_os_hosts (Transact-SQL)」を参照してください。 |
parent_task_address | varbinary(8) | オブジェクトの親であるタスクのメモリ アドレス。 |
pdw_node_id | int | 適用対象: Azure Synapse Analytics、Analytics Platform System (PDW) このディストリビューションがオンになっているノードの識別子。 |
アクセス許可
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. 並列要求の監視
並列で実行される要求の場合、同じ組み合わせ (<session_id>、 <request_id>) に対して複数の行が表示されます。 次のクエリを使用して、すべてのアクティブな要求の 並列処理サーバー構成オプション の最大限度を構成するを検索します。
Note
request_idはセッション内で一意です。
SELECT
task_address,
task_state,
context_switches_count,
pending_io_count,
pending_io_byte_count,
pending_io_byte_average,
scheduler_id,
session_id,
exec_context_id,
request_id,
worker_address,
host_address
FROM sys.dm_os_tasks
ORDER BY session_id, request_id;
B. セッション ID を Windows のスレッドに関連付ける
次のクエリを使用して、セッション ID 値を Windows スレッド ID に関連付けることができます。 これにより、Windows パフォーマンス モニターでスレッドのパフォーマンスを監視できます。 次のクエリでは、スリープしているセッションの情報は返されません。
SELECT STasks.session_id, SThreads.os_thread_id
FROM sys.dm_os_tasks AS STasks
INNER JOIN sys.dm_os_threads AS SThreads
ON STasks.worker_address = SThreads.worker_address
WHERE STasks.session_id IS NOT NULL
ORDER BY STasks.session_id;
GO
関連項目
SQL Server オペレーティングシステム関連の動的管理ビュー (Transact-sql)
スレッドおよびタスクのアーキテクチャ ガイド