sys.dm_os_workers (Transact-SQL)
適用対象: SQL Server Azure SQL データベース Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
システム内のすべての worker の行を返します。 Worker の詳細については、「スレッドおよびタスクのアーキテクチャ ガイド」を参照してください。
Note
Azure Synapse Analytics または Analytics Platform System (PDW) からこれを呼び出すには、sys.dm_pdw_nodes_os_workers という名前を使用します。 この構文は、Azure Synapse Analytics のサーバーレス SQL プールでサポートされていません。
列名 | データ型 | 説明 |
---|---|---|
worker_address | varbinary(8) | Worker のメモリ アドレス。 |
status | int | 内部のみで使用します。 |
is_preemptive | bit | 1 = ワーカーは、プリエンプティブなスケジュール設定で実行中です。 外部コードを実行している worker は、プリエンプティブ スケジューリングで実行されます。 |
is_fiber | bit | 1 = Worker は軽量プールで実行されています。 詳細については、「sp_configure (Transact-SQL)」を参照してください。 |
is_sick | bit | 1 = ワーカーは、スピン ロックを取得しようとして停止しています。 このビットが設定されている場合は、頻繁にアクセスされるオブジェクトの競合に問題があることを示している可能性があります。 |
is_in_cc_exception | bit | 1 = Worker は現在、SQL Server 以外の例外を処理しています。 |
is_fatal_exception | bit | この worker が致命的な例外を受け取ったかどうかを指定します。 |
is_inside_catch | bit | 1 = Worker は現在、例外を処理しています。 |
is_in_polling_io_completion_routine | bit | 1 = Worker は現在、保留中の I/O に対して I/O 完了ルーチンを実行中です。 詳細については、「sys.dm_io_pending_io_requests (Transact-SQL)」を参照してください。 |
context_switch_count | int | この worker によって実行されるスケジューラ コンテキスト スイッチの数。 |
pending_io_count | int | ワーカーによって実行された物理 I/O の数。 |
pending_io_byte_count | bigint | この worker のすべての物理 I/O の合計バイト数。 |
pending_io_byte_average | int | ワーカーの物理 I/O の平均バイト数。 |
wait_started_ms_ticks | bigint | この worker の状態が SUSPENDED になった時点 (ms_ticks)。 この値を sys.dm_os_sys_info で ms_ticks から減算すると、worker が待機している時間がミリ秒単位で返されます。 |
wait_resumed_ms_ticks | bigint | この worker の状態が RUNNABLE になった時点 (ms_ticks)。 この値を sys.dm_os_sys_info の ms_ticks から減算すると、worker が実行可能キューで待機している時間がミリ秒単位で返されます。 |
task_bound_ms_ticks | bigint | タスクがこの worker にバインドされた時点 (ms_ticks)。 |
worker_created_ms_ticks | bigint | Worker が作成された時点 (ms_ticks)。 |
exception_num | int | ワーカーで前回発生した例外のエラー番号。 |
exception_severity | int | ワーカーで前回発生した例外の重大度。 |
exception_address | varbinary(8) | 例外をスローしたコード アドレス。 |
アフィニティ | bigint | ワーカーのスレッド関係。 sys.dm_os_threads (Transact-SQL) のスレッドの関係と一致します。 |
州 | nvarchar(60) | Worker の状態。 値は、次のいずれかです。 INIT = Worker は現在初期化中です。 RUNNING = ワーカーは、現在非プリエンプティブまたはプリエンプティブのいずれかで実行中です。 RUNNABLE = ワーカーは、スケジューラ上で実行できる状態です。 SUSPENDED = ワーカーは現在中断されています。イベントによるシグナル送信を待機中です。 |
start_quantum | bigint | ワーカーの現在の実行が開始された時間 (ミリ秒単位)。 |
end_quantum | bigint | この worker の現在の実行が終了する時間 (ミリ秒単位)。 |
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 | この worker が処理したタスクの数。 |
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) | この worker に関連付けられているスレッドのメモリ アドレス。 詳細については、「sys.dm_os_threads (Transact-SQL)」を参照してください。 |
signal_worker_address | varbinary(8) | このオブジェクトを最後に通知した worker のメモリ アドレス。 詳細については、「sys.dm_os_workers」を参照してください。 |
scheduler_address | varbinary(8) | スケジューラのメモリ アドレス。 詳細については、「sys.dm_os_schedulers (Transact-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 回続けて発生すると、worker はキューの末尾に置かれます。 ワーカーがキューの末尾に移動すると、パフォーマンスに影響が生じる場合があります。
アクセス許可
SQL Server では、VIEW SERVER STATE
権限が必要です。
SQL Database Premium 階層では、データベースで VIEW DATABASE STATE
権限が必要です。 SQL Database Standard レベルと Basic レベルでは、Server Admin
ロール メンバーシップ、または Azure Active Directory admin
アカウントが必要です。
SQL Server 2022 以降でのアクセス許可
サーバーに対する VIEW SERVER PERFORMANCE 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
が等しい場合、これは worker が SUSPENDED 状態となっている時刻を表します。 等しくない場合、w_runnable
は、RUNNABLE 状態でワーカーが費やした時間を示します。 出力では、セッション 52
は、35,094
ミリ秒間 SUSPENDED
となります。
参照
SQL Server オペレーティングシステム関連の動的管理ビュー (Transact-sql)
クエリ処理アーキテクチャ ガイド
スレッドおよびタスクのアーキテクチャ ガイド