sys.dm_os_workers (Transact-SQL)
システム内のワーカーごとに 1 行のデータを返します。
列名 |
データ型 |
説明 |
---|---|---|
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 完了ルーチンを実行中です。詳細については、「sys.dm_io_pending_io_requests (Transact-SQL)」を参照してください。 |
context_switch_count |
int |
ワーカーによって実行された、スケジューラのコンテキスト切り替えの数。 |
pending_io_count |
int |
ワーカーによって実行された物理 I/O の数。 |
pending_io_byte_count |
bigint |
ワーカーに対して保留となっているすべての物理 I/O の合計バイト数。 |
pending_io_byte_average |
int |
ワーカーの物理 I/O の平均バイト数。 |
wait_started_ms_ticks |
int |
ワーカーの状態が SUSPENDED になった時点 (ms_ticks)。この値を sys.dm_os_sys_info の ms_ticks から減算すると、ワーカーが待機している時間がミリ秒単位で返されます。 |
wait_resumed_ms_ticks |
int |
ワーカーの状態が RUNNABLE になった時点 (ms_ticks)。この値を sys.dm_os_sys_info の ms_ticks から減算すると、ワーカーが実行可能キューで待機している時間 (ミリ秒単位) を求めることができます。 |
task_bound_ms_ticks |
bigint |
タスクがワーカーにバインドされた時点 (ms_ticks)。 |
worker_created_ms_ticks |
bigint |
ワーカーが作成された時点 (ms_ticks)。 |
exception_num |
int |
ワーカーで前回発生した例外のエラー番号。 |
exception_severity |
int |
ワーカーで前回発生した例外の重大度。 |
exception_address |
varbinary(8) |
例外を返したコード アドレス。 |
locale |
int |
ワーカーのロケール LCID 設定。 |
affinity |
bigint |
ワーカーの関係設定。詳細については、「sys.dm_os_schedulers (Transact-SQL)」を参照してください。 |
state |
nvarchar(60) |
ワーカーの状態。次の値のいずれかです。 INIT = ワーカーは、現在初期化中です。 RUNNING = ワーカーは、現在非プリエンプティブまたはプリエンプティブのいずれかで実行中です。 RUNNABLE = ワーカーは、スケジューラ上で実行できる状態です。 SUSPENDED = ワーカーは現在中断されています。イベントによるシグナル送信を待機中です。 |
start_quantum |
bigint |
ワーカーの現在の実行が開始された時間 (ミリ秒単位)。 |
end_quantum |
bigint |
ワーカーの現在の実行が終了した時間 (ミリ秒単位)。 |
last_wait_type |
nvarchar(60) |
前回の待機の種類。待機の種類の一覧については、「sys.dm_os_wait_stats (Transact-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) |
現在のタスクのメモリ アドレス。詳細については、「sys.dm_os_tasks (Transact-SQL)」を参照してください。 |
memory_object_address |
varbinary(8) |
ワーカーのメモリ オブジェクトのメモリ アドレス。詳細については、「sys.dm_os_memory_objects (Transact-SQL)」を参照してください。 |
thread_address |
varbinary(8) |
ワーカーに関連付けられているスレッドのメモリ アドレス。詳細については、「sys.dm_os_threads (Transact-SQL)」を参照してください。 |
signal_worker_address |
varbinary(8) |
オブジェクトに最後にシグナルを送信したワーカーのメモリ アドレス。詳細については、「sys.dm_os_workers (Transact-SQL)」を参照してください。 |
scheduler_address |
varbinary(8) |
スケジューラのメモリ アドレス。詳細については、「sys.dm_os_schedulers (Transact-SQL)」を参照してください。 |
説明
ワーカーの状態が RUNNING で、非プリエンプティブに実行されている場合、そのワーカーのアドレスは、sys.dm_os_schedulers 内の active_worker_address と一致します。
イベントで待機中のワーカーがシグナルを受け取ると、そのワーカーは実行可能キューの先頭に置かれます。SQL Server でこれが 1,000 回続けて発生すると、ワーカーはキューの末尾に置かれます。ワーカーがキューの末尾に移動すると、パフォーマンスに影響が生じる場合があります。
権限
サーバーに対する VIEW SERVER STATE 権限が必要です。
例
次のクエリを使用すると、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
w_runnable と w_suspended が等しい場合、この出力は、ワーカーが SUSPENDED 状態にある時間を示します。等しくない場合、w_runnable は、RUNNABLE 状態でワーカーが費やした時間を示します。この出力では、セッション 52 は 35,094 ミリ秒間 SUSPENDED 状態にあることがわかります。