sys.dm_os_workers (Transact-SQL)

適用対象: はいSQL Server (サポートされているすべてのバージョン) はいAzure SQL データベース はいAzure SQL Managed Instance はいAzure Synapse Analytics はいParallel Data Warehouse

システム内のすべてのワーカーの行を返します。 ワーカーの詳細については、「スレッドとタスク の アーキテクチャ ガイド」を参照してください

注意

または からこれを呼び Azure Synapse Analytics 出 Analytics Platform System (PDW) す場合は、 の名前を sys.dm_pdw_nodes_os_workers。 この構文は、Azure Synapse Analytics のサーバーレス SQL プールでサポートされていません。

列名 データ型 説明
worker_address varbinary(8) ワーカーのメモリ アドレス。
status int 内部使用のみです。
is_preemptive bit 1 = ワーカーは、プリエンプティブなスケジュール設定で実行中です。 外部コードを実行しているワーカーは、プリエプティブ スケジューリングの下で実行されます。
is_fiber bit 1 = ワーカーが軽量プールで実行されています。 詳細については、「 sp_configure (Transact-SQL)」を参照してください。
is_sick bit 1 = ワーカーは、スピン ロックを取得しようとして停止しています。 このビットが設定されている場合、これは、頻繁にアクセスされるオブジェクトでの問題を示している可能性があります。
is_in_cc_exception bit 1 = ワーカーは現在、例外以外を処理 SQL Server しています。
is_fatal_exception bit このワーカーが致命的な例外を受け取ったかどうかを指定します。
is_inside_catch bit 1 = ワーカーは現在例外を処理しています。
is_in_polling_io_completion_routine bit 1 = ワーカーは現在、保留中の I/O の I/O 完了ルーチンを実行しています。 詳細については、「Transact-sys.dm_io_pending_io_requests (」を参照SQL)。
context_switch_count int このワーカーによって実行されるスケジューラ コンテキスト スイッチの数。
pending_io_count int ワーカーによって実行された物理 I/O の数。
pending_io_byte_count bigint このワーカーの保留中のすべての物理 I/Os の合計バイト数。
pending_io_byte_average int ワーカーの物理 I/O の平均バイト数。
wait_started_ms_ticks bigint このワーカーが SUSPENDED 状態にms_ticksした時点。 この値を ms_ticksからsys.dm_os_sys_info ワーカーが待機しているミリ秒数を返します。
wait_resumed_ms_ticks bigint このワーカーが RUNNABLE 状態にms_ticksした時点。 この値を ms_ticksから sys.dm_os_sys_info、ワーカーが実行可能キューに入っているミリ秒数を返します。
task_bound_ms_ticks bigint タスクがこのワーカー にms_ticksされている場合の、その時点。
worker_created_ms_ticks bigint ワーカーが作成 ms_ticksの時点
exception_num int ワーカーで前回発生した例外のエラー番号。
exception_severity int ワーカーで前回発生した例外の重大度。
exception_address varbinary(8) 例外をスローしたコード アドレス。
affinity bigint ワーカーのスレッド関係。 Transact-SQL)内のスレッドのアフィニティsys.dm_os_threads (一致します
state nvarchar(60) ワーカー状態。 次の値のいずれかです。

INIT = ワーカーは現在初期化中です。

RUNNING = ワーカーは、現在非プリエンプティブまたはプリエンプティブのいずれかで実行中です。

RUNNABLE = ワーカーは、スケジューラ上で実行できる状態です。

SUSPENDED = ワーカーは現在中断されています。イベントによるシグナル送信を待機中です。
start_quantum bigint ワーカーの現在の実行が開始された時間 (ミリ秒単位)。
end_quantum bigint このワーカーの現在の実行の最後の時間 (ミリ秒単位)。
last_wait_type nvarchar(60) 最後の待機の種類。 待機の種類の一覧については、「Transact-sys.dm_os_wait_stats (」をSQL)。
return_code int 最後の待機からの戻り値。 次の値のいずれかです。

0 =SUCCESS

3 = DEADLOCK

4 = PREMATURE_WAKEUP

258 = TIMEOUT
quantum_used bigint 内部使用のみです。
max_quantum bigint 内部使用のみです。
boost_count int 内部使用のみです。
tasks_processed_count int このワーカーが処理したタスクの数。
fiber_address varbinary(8) ワーカーが関連付けられているファイバーのメモリ アドレス。

NULL = SQL Server は、簡易プーリング用に構成されていません。
task_address varbinary(8) 現在のタスクのメモリ アドレス。 詳細については、「Transact-sys.dm_os_tasks (」を参照SQL)。
memory_object_address varbinary(8) ワーカーのメモリ オブジェクトのメモリ アドレス。 詳細については、「Transact-sys.dm_os_memory_objects (」を参照SQL)。
thread_address varbinary(8) このワーカーに関連付けられているスレッドのメモリ アドレス。 詳細については、「Transact-sys.dm_os_threads (」を参照SQL)。
signal_worker_address varbinary(8) このオブジェクトに最後にシグナルを送信したワーカーのメモリ アドレス。 詳細については、「」を参照sys.dm_os_workers。
scheduler_address varbinary(8) スケジューラのメモリ アドレス。 詳細については、「Transact-sys.dm_os_schedulers (」を参照SQL)。
processor_group smallint このスレッドに割り当てられているプロセッサ グループ ID が格納されます。
pdw_node_id int 適用対象: Azure Synapse Analytics 、 Analytics Platform System (PDW)

このディストリビューションが含まれるノードの識別子。

解説

ワーカーの状態が RUNNING で、非プリエンプティブに実行されている場合、そのワーカーのアドレスは、sys.dm_os_schedulers 内の active_worker_address と一致します。

イベントで待機中のワーカーがシグナルを受け取ると、そのワーカーは実行可能キューの先頭に置かれます。 SQL Server でこれが 1,000 回続けて発生すると、ワーカーはキューの末尾に置かれます。 ワーカーがキューの末尾に移動すると、パフォーマンスに影響が生じる場合があります。

アクセス許可

では SQL Server 、アクセス許可が VIEW SERVER STATE 必要です。
SQL Database[プレミアムでは、 にはデータベース VIEW DATABASE STATE のアクセス許可が必要です。 Standard SQL Database レベルと Basic レベルでは、ロール メンバーシップ Server Admin またはアカウントが必要 Azure Active Directory admin です。

次のクエリを使用すると、SUSPENDED または RUNNABLE 状態でのワーカーの実行時間を調べることができます。

SELECT   
    t1.session_id,  
    CONVERT(varchar(10), t1.status) AS status,  
    CONVERT(varchar(15), t1.command) AS command,  
    CONVERT(varchar(10), t2.state) AS worker_state,  
    w_suspended =   
      CASE t2.wait_started_ms_ticks  
        WHEN 0 THEN 0  
        ELSE   
          t3.ms_ticks - t2.wait_started_ms_ticks  
      END,  
    w_runnable =   
      CASE t2.wait_resumed_ms_ticks  
        WHEN 0 THEN 0  
        ELSE   
          t3.ms_ticks - t2.wait_resumed_ms_ticks  
      END  
  FROM sys.dm_exec_requests AS t1  
  INNER JOIN sys.dm_os_workers AS t2  
    ON t2.task_address = t1.task_address  
  CROSS JOIN sys.dm_os_sys_info AS t3  
  WHERE t1.scheduler_id IS NOT NULL;  

結果セットは次のようになります。

 session_id status     command         worker_state w_suspended w_runnable  
 ---------- ---------- --------------- ------------ ----------- --------------------  
 4          background LAZY WRITER     SUSPENDED    688         688  
 6          background LOCK MONITOR    SUSPENDED    4657        4657
 19         background BRKR TASK       SUSPENDED    603820344   603820344  
 14         background BRKR EVENT HNDL SUSPENDED    63583641    63583641  
 51         running    SELECT          RUNNING      0           0  
 2          background RESOURCE MONITO RUNNING      0           603825954  
 3          background LAZY WRITER     SUSPENDED    422         422  
 7          background SIGNAL HANDLER  SUSPENDED    603820485   603820485  
 13         background TASK MANAGER    SUSPENDED    603824704   603824704  
 18         background BRKR TASK       SUSPENDED    603820407   603820407  
 9          background TRACE QUEUE TAS SUSPENDED    454         454  
 52         suspended  SELECT          SUSPENDED    35094       35094  
 1          background RESOURCE MONITO RUNNING      0           603825954  

出力で と が等しい場合、これはワーカーが SUSPENDED 状態である時間 w_runnable w_suspended を表します。 等しくない場合、w_runnable は、RUNNABLE 状態でワーカーが費やした時間を示します。 出力では、セッション 52SUSPENDED ミリ 35,094 秒です。

参照

SQL ServerTransact-(に関連するオペレーティング システムSQL)
クエリ処理アーキテクチャ ガイド
スレッドおよびタスクのアーキテクチャ ガイド