次の方法で共有


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)」を参照してください。

権限

サーバーに対する VIEW SERVER STATE 権限が必要です。

A. 並列要求を監視する

並列で実行される要求の場合は、同じ <session_id> と <request_id> の組み合わせに対して複数の行が表示されます。すべてのアクティブな要求に対する並列処理の次数を確認するには、次のクエリを使用します。

注意注意

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