sys.dm_os_schedulers
更新 : 2006 年 4 月 14 日
SQL Server のスケジューラごとに 1 行のデータを返します。SQL Server では、各スケジューラは個別のプロセッサにマップされています。このビューは、スケジューラの状況の監視やランナウェイ タスクの特定に使用できます。
列名
データ型
説明
scheduler_address
varbinary(8)
スケジューラのメモリ アドレス。NULL 値は許可されません。
parent_node_id
int
スケジューラが属するノード (親ノード) の ID。これは非均質メモリ アクセス (NUMA) ノードを表します。NULL 値は許可されません。
scheduler_id
int
スケジューラの ID。定期的なクエリの実行に使用されるスケジューラにはすべて、255 未満の ID 番号が付いています。ID が 255 以上のスケジューラは、専用管理者接続のスケジューラなど、SQL Server 内部で使用されるスケジューラです。NULL 値は許可されません。
cpu_id
smallint
スケジューラが関連付けられている CPU の ID。SQL Server が関係に基づいて実行するよう構成されている場合、値はスケジューラを実行する CPU の ID です。
255 = 関係マスクが指定されていません。
NULL 値は許可されません。
status
nvarchar(60)
スケジューラの状態。次の値のいずれかです。
- HIDDEN ONLINE
- HIDDEN OFFLINE
- VISIBLE ONLINE
- VISIBLE OFFLINE
- VISIBLE ONLINE (DAC)
NULL 値は許可されません。
HIDDEN スケジューラは、データベース エンジンの内部的な要求の処理に使用されます。VISIBLE スケジューラは、ユーザーの要求の処理に使用されます。
OFFLINE スケジューラは、関係マスクでオフラインになっているプロセッサにマップされます。そのため、要求の処理には使用されません。ONLINE スケジューラは、関係マスクでオンラインになっているプロセッサにマップされ、スレッドの処理に使用されます。
DCA は、スケジューラが専用管理者接続で動作していることを示します。
is_online
bit
SQL Server がサーバー上で利用可能なプロセッサだけを使用するよう構成されている場合、一部のスケジューラが、関係マスクにないプロセッサにマップされている可能性があります。これに該当する場合、この列には 0 が返されます。この値は、スケジューラがクエリまたはバッチの処理に使用されていないことを意味します。
NULL 値は許可されません。
is_idle
bit
1 = スケジューラはアイドル状態です。現在実行中のワーカーはありません。NULL 値は許可されません。
preemptive_switches_count
int
スケジューラのワーカーがプリエンプティブ モードに切り替えられた回数。
SQL Server 外部のコード (拡張ストアド プロシージャや分散クエリなど) を実行するには、スレッドを非プリエンプティブ スケジューラの制御外で実行する必要があります。このとき、ワーカーはプリエンプティブ モードに切り替えられます。
context_switches_count
int
スケジューラでコンテキストが切り替えられた回数。NULL 値は許可されません。
他のワーカーの実行を許可するには、現在実行しているワーカーでスケジューラの制御を解放するか、コンテキストを切り替える必要があります。
メモ :
ワーカーでスケジューラが解放され、そのワーカーが実行可能キューに移動した後、他のワーカーが見つからない場合は、元のワーカーが選択されます。この場合、context_switches_count は更新されませんが、yield_count は更新されます。
idle_switches_count
int
スケジューラがアイドル中にイベントを待機した回数。この列は context_switches_count と類似しています。NULL 値は許可されません。
current_tasks_count
int
このスケジューラに関連付けられている現在のタスクの数。これには次のタスクが含まれます。
- 実行ワーカーを待機しているタスク
- 現在待機中または実行中のタスク (SUSPENDED または RUNNABLE 状態)
タスクが完了すると、このカウントは 1 減ります。NULL 値は許可されません。
runnable_tasks_count
int
実行可能キューにあるスケジュール待ちのワーカーで、タスクが割り当てられているワーカーの数。NULL 値は許可されません。
current_workers_count
int
このスケジューラに関連付けられているワーカーの数。これにはタスクが割り当てられていないワーカーも含まれます。NULL 値は許可されません。
active_workers_count
int
アクティブなワーカーの数。アクティブなワーカーは常に非プリエンプティブで、タスクが関連付けられています。また、実行中、実行可能、または中断状態のいずれかになっています。NULL 値は許可されません。
work_queue_count
bigint
保留キュー内のタスクの数。保留キュー内のタスクは、ワーカーによる取得を待機しています。NULL 値は許可されません。
pending_disk_io_count
int
完了を待機している保留中の I/O の数。各スケジューラには保留中の I/O の一覧が保持されており、コンテキストが切り替えられるたび、これらの I/O が完了したかどうかを確認するために、この一覧がチェックされます。要求が挿入されると、カウントは 1 増えます。要求が完了すると、カウントは 1 減ります。この数は、I/O の状態を示すわけではありません。NULL 値は許可されません。
load_factor
int
スケジューラで認識されている負荷を示す内部値。この値は、新しいタスクをこのスケジューラに指定するか、または他のスケジューラに指定するかを決定するために使用されます。また、スケジューラの負荷が均等でないと思われる場合のデバッグに利用できます。SQL Server 2000 では、タスクは特定のスケジューラにルーティングされます。一方、SQL Server 2005 では、ルーティングはスケジューラの負荷に基づいて決定されます。SQL Server 2005 では、ノードとスケジューラの占有率を基に、リソースをどこで取得するかが決定されます。タスクがキューに置かれると、占有率は増加します。タスクが完了すると、占有率は減少します。占有率を利用すると、SQL Server OS で負荷を効率よく分散できます。NULL 値は許可されません。
yield_count
int
スケジューラの進行状況を示すために使用される内部値。この値は、スケジューラ モニタで、このスケジューラのワーカーが予定どおりに他のワーカーに変更されるかどうかを確認するために使用されます。ワーカーまたはタスクが新しいワーカーに移行するわけではありません。NULL 値は許可されません。
last_timer_activity
bigint
前回、スケジューラのタイマ キューがスケジューラにより確認された時間 (CPU チック単位)。NULL 値は許可されません。
failed_to_create_worker
bit
スケジューラで新しいワーカーを作成できなかった場合は 1 になります。これは通常、メモリ制約が原因で発生します。NULL 値は許可されます。
active_worker_address
varbinary(8)
現在アクティブなワーカーのメモリ アドレス。NULL 値は許可されます。詳細については、「sys.dm_os_workers」を参照してください。
memory_object_address
varbinary(8)
スケジューラのメモリ オブジェクトのメモリ アドレス。NULL 値は許可されません。
task_memory_object_address
varbinary(8)
タスクのメモリ オブジェクトのメモリ アドレス。NULL 値は許可されません。詳細については、「sys.dm_os_memory_objects」を参照してください。
権限
サーバーに対する VIEW SERVER STATE 権限が必要です。
例
A. 非表示スケジューラと表示スケジューラを監視する
次のクエリでは、SQL Server のすべてのスケジューラに関して、ワーカーとタスクの状態が出力されます。このクエリは、次の要件を満たすコンピュータ システムで実行されました。
- 2 つのプロセッサ (CPU)
- 2 つの (NUMA) ノード
- 1 つの NUMA ノードにつき 1 つの CPU
- 関係マスクが
0x03
に設定されている
SELECT
scheduler_id,
cpu_id,
parent_node_id,
current_tasks_count,
runnable_tasks_count,
current_workers_count,
active_workers_count,
work_queue_count
FROM sys.dm_os_schedulers;
以下に結果セットを示します。
scheduler_id cpu_id parent_node_id current_tasks_count
------------ ------ -------------- -------------------
0 1 0 9
257 255 0 1
1 0 1 10
258 255 1 1
255 255 32 2
runnable_tasks_count current_workers_count
-------------------- ---------------------
0 11
0 1
0 18
0 1
0 3
active_workers_count work_queue_count
-------------------- --------------------
6 0
1 0
8 0
1 0
1 0
この出力では次のことがわかります。
- スケジューラは 5 つで、そのうちの 2 つの ID の値は 255 未満です。ID が 255 以上のスケジューラは非表示スケジューラであり、スケジューラ
255
は DAC (専用管理者接続) を表します。インスタンスごとに 1 つの DAC スケジューラが存在します。メモリの負荷を調整するリソース モニタでは、NUMA ノードごとに 1 つずつ、スケジューラ257
とスケジューラ258
が使用されます。 - 出力では、23 のアクティブなタスクが示されています。これらのタスクには、SQL Server によって開始されたリソース管理タスクに加えて、ユーザーの要求も含まれています。SQL Server タスクの例としては、RESOURCE MONITOR (NUMA ノードごとに 1 つ)、LAZY WRITER (NUMA ノードごとに 1 つ)、LOCK MONITOR、CHECKPOINT、LOG WRITER などがあります。
- NUMA ノード
0
は CPU1
にマップされており、NUMA ノード1
は CPU0
にマップされています。SQL Server は通常、ノード 0 以外の NUMA ノードで起動します。詳細については、「Non-Uniform Memory Access について」を参照してください。 - ここでは
runnable_tasks_count
に0
が返されており、これはアクティブに実行中のタスクが存在しないことを意味します。ただし、アクティブなセッションは存在する可能性があります。 - DAC を表すスケジューラ
255
には、3
つのワーカーが関連付けられています。これらのワーカーは SQL Server の起動時に割り当てられ、変更されることはありません。これらのワーカーは DAC クエリの処理のみに使用されます。このスケジューラ上の 2 つのタスクは、接続マネージャとアイドル状態のワーカーを表します。 active_workers_count
は、タスクが関連付けられ、非プリエンプティブ モードで実行中のすべてのワーカーを表します。ネットワーク リスナなどの一部のタスクは、プリエンプティブなスケジュール設定で実行されます。- 非表示スケジューラでは、通常のユーザー要求は処理されません。ただし、DAC スケジューラは例外です。この DAC スケジューラには、要求を処理するためのスレッドが 1 つあります。
B. 稼働率が高いシステムで表示スケジューラを監視する
次のクエリでは、負荷が高い表示スケジューラの状態を示します。このスケジューラでは、利用可能なワーカーの処理数を上回る要求が存在します。この例では、256 のワーカーにタスクが割り当てられており、一部のタスクはワーカーへの割り当てを待機中です。実行可能なタスクの数が少ないということは、複数のタスクがリソースの待機中であることを意味します。
メモ : |
---|
sys.dm_os_workers でクエリを実行すると、ワーカーの状態を確認できます。詳細については、「sys.dm_os_workers」を参照してください。 |
クエリは次のようになります。
SELECT
scheduler_id,
cpu_id,
current_tasks_count,
runnable_tasks_count,
current_workers_count,
active_workers_count,
work_queue_count
FROM sys.dm_os_schedulers
WHERE scheduler_id < 255;
以下に結果セットを示します。
scheduler_id current_tasks_count runnable_tasks_count
------------ ------------------- --------------------
0 144 0
1 147 1
current_workers_count active_workers_count work_queue_count
--------------------- -------------------- --------------------
128 125 16
128 126 19
これに比較して次の結果では、実行可能なタスクが複数あり、ワーカーの取得を待機中のタスクがないことが示されています。work_queue_count
は両方のスケジューラで 0
になっています。
scheduler_id current_tasks_count runnable_tasks_count
------------ ------------------- --------------------
0 107 98
1 110 100
current_workers_count active_workers_count work_queue_count
--------------------- -------------------- --------------------
128 104 0
128 108 0
参照
関連項目
動的管理ビューと動的管理関数
SQL Server オペレーティング システム関連の動的管理ビュー
その他の技術情報
[機能のセキュリティ構成] (DAC) - データベース エンジン
メモリ アーキテクチャ
ヘルプおよび情報
変更履歴
リリース | 履歴 |
---|---|
2006 年 4 月 14 日 |
|