sys.dm_os_tasks (Transact-SQL)
SQL Server インスタンスでアクティブになっているタスクごとに 1 行のデータを返します。
列名 |
データ型 |
説明 |
---|---|---|
task_address |
varbinary(8) |
オブジェクトのメモリ アドレス。 |
task_state |
nvarchar(60) |
タスクの状態。 次のいずれかになります。 PENDING: ワーカー スレッドを待機しています。 RUNNABLE: 実行可能ですが、クォンタムの受信を待機しています。 RUNNING: スケジューラで現在実行中です。 SUSPENDED: ワーカーがありますが、イベントを待機しています。 DONE: 完了しました。 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) |
オブジェクトの親であるタスクのメモリ アドレス。 |
権限
サーバーに対する VIEW SERVER STATE 権限が必要です。
使用例
A. 並列要求を監視する
並列で実行される要求の場合は、同じ <session_id> と <request_id> の組み合わせに対して複数の行が表示されます。 すべてのアクティブな要求に対する max degree of parallelism サーバー構成オプションの構成を確認するには、次のクエリを使用します。
注 |
---|
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