sys.dm_os_tasks (Transact-SQL)

適用対象:yesSQL Server (サポートされているすべてのバージョン) YesAzure SQL Database YesAzure SQL Managed Instance yesAzure Synapse Analytics yesAnalytics Platform System (PDW)

SQL Serverのインスタンスでアクティブなタスクごとに 1 行を返します。 タスクは、SQL Serverの基本的な実行単位です。 タスクの例としては、クエリ、ログイン、ログアウト、システム タスク (ゴースト クリーンアップ アクティビティ、チェックポイント アクティビティ、ログ ライター、並列再実行アクティビティなど) があります。 タスクの詳細については、「 スレッドとタスクのアーキテクチャ ガイド」を参照してください。

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 BasicS0、および S1 のサービス目標、およびエラスティック プール内のデータベースの場合、サーバー管理者アカウント、Azure Active Directory 管理者アカウント、または ##MS_ServerStateReader##サーバー ロールのメンバーシップが必要です。 他のすべての SQL Database サービス目標では、データベースに対する VIEW DATABASE STATE アクセス許可または ##MS_ServerStateReader## サーバー ロールのメンバーシップのいずれかが必要です。

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)
スレッドおよびタスクのアーキテクチャ ガイド