sys.dm_os_schedulers (Transact-SQL)sys.dm_os_schedulers (Transact-SQL)

適用対象: ○SQL Server (2008 以降) ○Azure SQL Database ○Azure SQL Data Warehouse ○Parallel Data Warehouse APPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

SQL ServerSQL Server のスケジューラごとに 1 行のデータを返します。各スケジューラは個別のプロセッサにマップされています。Returns one row per scheduler in SQL ServerSQL Server where each scheduler is mapped to an individual processor. このビューは、スケジューラの状況の監視やランナウェイ タスクの特定に使用できます。Use this view to monitor the condition of a scheduler or to identify runaway tasks.

注意

これからAzure SQL データ ウェアハウスAzure SQL Data WarehouseまたはParallel Data WarehouseParallel Data Warehouse、名前を使用して、 sys.dm_pdw_nodes_os_schedulersします。To call this from Azure SQL データ ウェアハウスAzure SQL Data Warehouse or Parallel Data WarehouseParallel Data Warehouse, use the name sys.dm_pdw_nodes_os_schedulers.

列名Column name データ型Data type 説明Description
scheduler_addressscheduler_address varbinary(8)varbinary(8) スケジューラのメモリ アドレス。Memory address of the scheduler. NULL 値は許可されません。Is not nullable.
parent_node_idparent_node_id intint スケジューラが属するノード (親ノード) の ID。ID of the node that the scheduler belongs to, also known as the parent node. これは非均質メモリ アクセス (NUMA) ノードを表します。This represents a nonuniform memory access (NUMA) node. NULL 値は許可されません。Is not nullable.
scheduler_idscheduler_id intint スケジューラの ID。ID of the scheduler. 定期的なクエリの実行に使用されるスケジューラにはすべて、1048576 未満の ID 番号が付いています。All schedulers that are used to run regular queries have ID numbers less than 1048576. Id が 1048576 以上スケジューラが内部で使用されるSQL ServerSQL Server、専用管理者接続のスケジューラなどです。Those schedulers that have IDs greater than or equal to 1048576 are used internally by SQL ServerSQL Server, such as the dedicated administrator connection scheduler. NULL 値は許可されません。Is not nullable.
cpu_idcpu_id smallintsmallint スケジューラに割り当てられた CPU ID。CPU ID assigned to the scheduler.

NULL 値は許可されません。Is not nullable.

注: 255 は示しませんありませんアフィニティようSQL Server 2005 (9.x)SQL Server 2005 (9.x)します。Note: 255 does not indicate no affinity as it did in SQL Server 2005 (9.x)SQL Server 2005 (9.x). 参照してくださいsys.dm_os_threads (TRANSACT-SQL) 関係の詳細についてはします。See sys.dm_os_threads (Transact-SQL) for additional affinity information.
statusstatus nvarchar(60)nvarchar(60) スケジューラの状態。Indicates the status of the scheduler. 次の値のいずれかです。Can be one of the following values:

非オンライン- HIDDEN ONLINE
非オフライン- HIDDEN OFFLINE
表示されるオンライン- VISIBLE ONLINE
表示されているオフライン- VISIBLE OFFLINE
表示されるオンライン (DAC)- VISIBLE ONLINE (DAC)
- HOT_ADDED- HOT_ADDED

NULL 値は許可されません。Is not nullable.

非表示スケジューラが内部的な要求の処理に使用される、データベース エンジンDatabase Engineします。HIDDEN schedulers are used to process requests that are internal to the データベース エンジンDatabase Engine. VISIBLE スケジューラは、ユーザーの要求の処理に使用されます。VISIBLE schedulers are used to process user requests.

OFFLINE スケジューラは、関係マスクでオフラインになっているプロセッサにマップされます。そのため、要求の処理には使用されません。OFFLINE schedulers map to processors that are offline in the affinity mask and are, therefore, not being used to process any requests. ONLINE スケジューラは、関係マスクでオンラインになっているプロセッサにマップされ、スレッドの処理に使用されます。ONLINE schedulers map to processors that are online in the affinity mask and are available to process threads.

DAC は、スケジューラが専用管理者接続で動作していることを示します。DAC indicates the scheduler is running under a dedicated administrator connection.

HOT ADDED は、スケジューラがホット アド CPU イベントに応答して追加されたことを示します。HOT ADDED indicates the schedulers were added in response to a hot add CPU event.
is_onlineis_online bitbit 場合SQL ServerSQL Serverが構成されている一部のスケジューラがアフィニティ マスクのないプロセッサにマップされている、サーバーで使用可能なプロセッサの一部のみを使用してこの構成が意味ことができます。If SQL ServerSQL Server is configured to use only some of the available processors on the server, this configuration can mean that some schedulers are mapped to processors that are not in the affinity mask. これに該当する場合、この列には 0 が返されます。If that is the case, this column returns 0. この値は、スケジューラがクエリまたはバッチの処理に使用されていないことを意味します。This value means that the scheduler is not being used to process queries or batches.

NULL 値は許可されません。Is not nullable.
is_idleis_idle bitbit 1 = スケジューラはアイドル状態です。1 = Scheduler is idle. 現在実行中のワーカーはありません。No workers are currently running. NULL 値は許可されません。Is not nullable.
preemptive_switches_countpreemptive_switches_count intint スケジューラのワーカーがプリエンプティブ モードに切り替えられた回数。Number of times that workers on this scheduler have switched to the preemptive mode.

SQL ServerSQL Server 外部のコード (拡張ストアド プロシージャや分散クエリなど) を実行するには、スレッドを非プリエンプティブ スケジューラの制御外で実行する必要があります。To execute code that is outside SQL ServerSQL Server (for example, extended stored procedures and distributed queries), a thread has to execute outside the control of the non-preemptive scheduler. このとき、ワーカーはプリエンプティブ モードに切り替えられます。To do this, a worker switches to preemptive mode.
context_switches_countcontext_switches_count intint スケジューラでコンテキストが切り替えられた回数。Number of context switches that have occurred on this scheduler. NULL 値は許可されません。Is not nullable.

他のワーカーの実行を許可するには、現在実行しているワーカーでスケジューラの制御を解放するか、コンテキストを切り替える必要があります。To allow for other workers to run, the current running worker has to relinquish control of the scheduler or switch context.

注: ワーカーは、スケジューラが得られます自体を実行可能キューに配置し、他のワーカーが、検出されない、自体のワーカーが選択されます。Note: If a worker yields the scheduler and puts itself into the runnable queue and then finds no other workers, the worker will select itself. この場合、context_switches_count は更新されませんが、yield_count は更新されます。In this case, the context_switches_count is not updated, but the yield_count is updated.
idle_switches_countidle_switches_count intint スケジューラがアイドル中にイベントを待機した回数。Number of times the scheduler has been waiting for an event while idle. この列は context_switches_count と類似しています。This column is similar to context_switches_count. NULL 値は許可されません。Is not nullable.
current_tasks_countcurrent_tasks_count intint このスケジューラに関連付けられている現在のタスクの数。Number of current tasks that are associated with this scheduler. これには次のタスクが含まれます。This count includes the following:

-それらを実行するワーカーを待機しているタスク。- Tasks that are waiting for a worker to execute them.
-現在待機中または (SUSPENDED または RUNNABLE 状態) で実行するタスク。- Tasks that are currently waiting or running (in SUSPENDED or RUNNABLE state).

タスクが完了すると、このカウントは 1 減ります。When a task is completed, this count is decremented. NULL 値は許可されません。Is not nullable.
runnable_tasks_countrunnable_tasks_count intint 実行可能キューにあるスケジュール待ちのワーカーで、タスクが割り当てられているワーカーの数。Number of workers, with tasks assigned to them, that are waiting to be scheduled on the runnable queue. NULL 値は許可されません。Is not nullable.
current_workers_countcurrent_workers_count intint このスケジューラに関連付けられているワーカーの数。Number of workers that are associated with this scheduler. これにはタスクが割り当てられていないワーカーも含まれます。This count includes workers that are not assigned any task. NULL 値は許可されません。Is not nullable.
active_workers_countactive_workers_count intint アクティブなワーカーの数。Number of workers that are active. アクティブなワーカーがプリエンプティブになることはなく、必ずタスクが関連付けられています。また、実行中、実行可能、または中断状態のいずれかになっています。An active worker is never preemptive, must have an associated task, and is either running, runnable, or suspended. NULL 値は許可されません。Is not nullable.
work_queue_countwork_queue_count bigintbigint 保留キュー内のタスクの数。Number of tasks in the pending queue. 保留キュー内のタスクは、ワーカーによる取得を待機しています。These tasks are waiting for a worker to pick them up. NULL 値は許可されません。Is not nullable.
pending_disk_io_countpending_disk_io_count intint 完了を待機している保留中の I/O の数。Number of pending I/Os that are waiting to be completed. 各スケジューラには保留中の I/O の一覧が保持されており、コンテキストが切り替えられるたび、これらの I/O が完了したかどうかを確認するために、この一覧がチェックされます。Each scheduler has a list of pending I/Os that are checked to determine whether they have been completed every time there is a context switch. 要求が挿入されると、カウントは 1 増えます。The count is incremented when the request is inserted. 要求が完了すると、カウントは 1 減ります。This count is decremented when the request is completed. この数は、I/O の状態を示すわけではありません。This number does not indicate the state of the I/Os. NULL 値は許可されません。Is not nullable.
load_factorload_factor intint スケジューラで認識されている負荷を示す内部値。Internal value that indicates the perceived load on this scheduler. この値は、新しいタスクをこのスケジューラに指定するか、または他のスケジューラに指定するかを決定するために使用されます。This value is used to determine whether a new task should be put on this scheduler or another scheduler. また、スケジューラの負荷が均等でないと思われる場合のデバッグに利用できます。This value is useful for debugging purposes when it appears that schedulers are not evenly loaded. ルーティングはスケジューラの負荷に基づいて決定されます。The routing decision is made based on the load on the scheduler. SQL ServerSQL Server ノードとスケジューラの占有率を最適なリソースを取得するのに場所を決めるにも使用します。also uses a load factor of nodes and schedulers to help determine the best location to acquire resources. タスクがエンキューされると、占有率は増加します。When a task is enqueued, the load factor is increased. タスクが完了すると、占有率は減少します。When a task is completed, the load factor is decreased. 占有率を利用すると、SQL ServerSQL Server OS で負荷を効率よく分散できます。Using the load factors helps SQL ServerSQL Server OS balance the work load better. NULL 値は許可されません。Is not nullable.
yield_countyield_count intint スケジューラの進行状況を示すために使用される内部値。Internal value that is used to indicate progress on this scheduler. この値は、スケジューラ モニターで、このスケジューラのワーカーが予定どおりに他のワーカーに変更されるかどうかを確認するために使用されます。This value is used by the Scheduler Monitor to determine whether a worker on the scheduler is not yielding to other workers on time. ワーカーまたはタスクが新しいワーカーに移行するわけではありません。This value does not indicate that the worker or task transitioned to a new worker. NULL 値は許可されません。Is not nullable.
last_timer_activitylast_timer_activity bigintbigint 前回、スケジューラのタイマー キューがスケジューラにより確認された時間 (CPU ティック単位)。In CPU ticks, the last time that the scheduler timer queue was checked by the scheduler. NULL 値は許可されません。Is not nullable.
failed_to_create_workerfailed_to_create_worker bitbit スケジューラで新しいワーカーを作成できなかった場合は 1 になります。Set to 1 if a new worker could not be created on this scheduler. これは通常、メモリ制約が原因で発生します。This generally occurs because of memory constraints. NULL 値が許可されます。Is nullable.
active_worker_addressactive_worker_address varbinary(8)varbinary(8) 現在アクティブなワーカーのメモリ アドレス。Memory address of the worker that is currently active. NULL 値が許可されます。Is nullable. 詳細については、次を参照してください。 sys.dm_os_workers (TRANSACT-SQL)します。For more information, see sys.dm_os_workers (Transact-SQL).
memory_object_addressmemory_object_address varbinary(8)varbinary(8) スケジューラのメモリ オブジェクトのメモリ アドレス。Memory address of the scheduler memory object. Null を許容しません。Not NULLABLE.
task_memory_object_addresstask_memory_object_address varbinary(8)varbinary(8) タスクのメモリ オブジェクトのメモリ アドレス。Memory address of the task memory object. NULL 値は許可されません。Is not nullable. 詳細については、次を参照してください。 sys.dm_os_memory_objects (TRANSACT-SQL)します。For more information, see sys.dm_os_memory_objects (Transact-SQL).
quantum_length_usquantum_length_us bigintbigint 単に情報を示すためだけに特定されます。Identified for informational purposes only. サポートされていません。Not supported. 将来の互換性は保証されません。Future compatibility is not guaranteed.SQLOS によって使用されるスケジューラ クォンタムを公開します。Exposes the scheduler quantum used by SQLOS.
total_cpu_usage_mstotal_cpu_usage_ms bigintbigint 適用対象:SQL Server 2016 (13.x)SQL Server 2016 (13.x)以降Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x) and later

非プリエンプティブ ワーカーによって報告された、このスケジューラによって消費される合計 cpu 使用率。Total CPU consumed by this scheduler as reported by non-preemptive workers. NULL 値は許可されません。Is not nullable.
total_cpu_idle_capped_mstotal_cpu_idle_capped_ms bigintbigint 単に情報を示すためだけに特定されます。Identified for informational purposes only. サポートされていません。Not supported. 将来の互換性は保証されません。Future compatibility is not guaranteed. 基づいた制限を示しますサービス レベル目標のバージョンの Azure 以外の場合は 0 が必ずSQL ServerSQL Serverします。Indicates throttling based on Service Level Objective, will always be 0 for non-Azure versions of SQL ServerSQL Server. NULL 値が許可されます。Is nullable.
total_scheduler_delay_mstotal_scheduler_delay_ms bigintbigint 適用対象:SQL Server 2016 (13.x)SQL Server 2016 (13.x)以降Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x) and later

1 つのワーカーの切り替えと切り替えもう 1 つまでの時間。The time between one worker switching out and another one switching in. プリエンプティブ ワーカーが、[次へ] の非プリエンプティブ ワーカーのまたは他のプロセスからのスレッドのスケジューリング、OS のためにスケジュール設定を行うことによって発生することができます。Can be caused by preemptive workers delaying the scheduling of the next non-preemptive worker, or due to the OS scheduling threads from other processes. NULL 値は許可されません。Is not nullable.
ideal_workers_limitideal_workers_limit intint 適用対象:SQL Server 2019 プレビューSQL Server 2019 preview以降Applies to: SQL Server 2019 プレビューSQL Server 2019 preview and later

ワーカーの数は、スケジューラになければなりませんが理想的です。How many workers should ideally be on the scheduler. 現在のワーカーがアイドル状態になった後、不均衡なタスクの負荷によって制限を超える場合は、除去されます。If the current workers exceed the limit due to imbalanced task load, once they become idle they will be trimmed. NULL 値は許可されません。Is not nullable.
pdw_node_idpdw_node_id intint 適用対象: Azure SQL データ ウェアハウスAzure SQL Data WarehouseParallel Data WarehouseParallel Data WarehouseApplies to: Azure SQL データ ウェアハウスAzure SQL Data Warehouse, Parallel Data WarehouseParallel Data Warehouse

この配布であるノードの識別子。The identifier for the node that this distribution is on.

アクセス許可Permissions

SQL ServerSQL Server、必要がありますVIEW SERVER STATE権限。On SQL ServerSQL Server, requires VIEW SERVER STATE permission.
SQL DatabaseSQL Databaseが必要です、VIEW DATABASE STATEデータベースの権限。On SQL DatabaseSQL Database, requires the VIEW DATABASE STATE permission in the database.

使用例Examples

A.A. 非表示スケジューラと表示スケジューラを監視するMonitoring hidden and nonhidden schedulers

次のクエリは、ワーカーの状態を出力し、タスクでSQL ServerSQL Server間のすべてのスケジューラでします。The following query outputs the state of workers and tasks in SQL ServerSQL Server across all schedulers. このクエリは、次の要件を満たすコンピューター システムで実行されました。This query was executed on a computer system that has the following:

  • 2 つのプロセッサ (CPU)Two processors (CPUs)

  • 2 つの (NUMA) ノードTwo (NUMA) nodes

  • 1 つの NUMA ノードにつき 1 つの CPUOne CPU per NUMA node

  • 関係マスクが 0x03 に設定されているAffinity mask set to 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;  

以下に結果セットを示します。Here is the result set.

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  

この出力では次のことがわかります。The output provides the following information:

  • スケジューラは 5 つで、There are five schedules. そのうちの 2 つの ID の値は 1048576 未満です。Two schedulers have an ID value < 1048576. ID が 1048576 以上のスケジューラは非表示スケジューラです。Schedulers with ID >= 1048576are known as hidden schedulers. スケジューラ255専用管理者接続 (DAC) を表します。Scheduler 255 represents the dedicated administrator connection (DAC). インスタンスごとに 1 つの DAC スケジューラが存在します。There is one DAC scheduler per instance. メモリの負荷を調整するリソース モニターは、スケジューラを使用して257とスケジューラ258、NUMA ノードごとに 1 つResource monitors that coordinate memory pressure use scheduler 257 and scheduler 258, one per NUMA node

  • 出力では、23 のアクティブなタスクが示されています。There are 23 active tasks in the output. これらのタスクは、ユーザーの要求によって開始されたリソースの管理タスクに加えてSQL ServerSQL Serverします。These tasks include user requests in addition to resource management tasks that have been started by SQL ServerSQL Server. 例のSQL ServerSQL Serverタスクはリソース モニター (NUMA ノードごとに 1 つ)、LAZY WRITER (NUMA ノードごとに 1 つ)、ロック モニター、チェックポイント、およびログ ライター。Examples of SQL ServerSQL Server tasks are RESOURCE MONITOR (one per NUMA node), LAZY WRITER (one per NUMA node), LOCK MONITOR, CHECKPOINT, and LOG WRITER.

  • NUMA ノード 0 は CPU 1 にマップされており、NUMA ノード 1 は CPU 0 にマップされています。NUMA node 0 is mapped to CPU 1 and NUMA node 1 is mapped to CPU 0. SQL ServerSQL Server 通常、ノード 0 以外の NUMA ノードで開始します。typically starts on a NUMA node other than node 0.

  • ここでは runnable_tasks_count0 が返されており、これはアクティブに実行中のタスクが存在しないことを意味します。With runnable_tasks_count returning 0, there are no actively running tasks. ただし、アクティブなセッションは存在する可能性があります。However, active sessions may exist.

  • スケジューラ255が DAC を表す3ワーカーが関連付けられています。Scheduler 255 representing DAC has 3 workers associated with it. これらのワーカーは SQL ServerSQL Server の起動時に割り当てられ、変更されることはありません。These workers are allocated at SQL ServerSQL Server startup and do not change. これらのワーカーは DAC クエリの処理のみに使用されます。These workers are used to process DAC queries only. このスケジューラ上の 2 つのタスクは、接続マネージャーとアイドル状態のワーカーを表します。The two tasks on this scheduler represent a connection manager and an idle worker.

  • active_workers_count タスクが関連付けられ、非プリエンプティブ モードで実行されているすべてのワーカーを表します。active_workers_count represents all workers that have associated tasks and are running under non-preemptive mode. ネットワーク リスナーなどの一部のタスクは、プリエンプティブなスケジュール設定で実行されます。Some tasks, such as network listeners, run under preemptive scheduling.

  • 非表示スケジューラでは、通常のユーザー要求は処理されません。Hidden schedulers do not process typical user requests. ただし、DAC スケジューラは例外です。The DAC scheduler is the exception. この DAC スケジューラには、要求を処理するためのスレッドが 1 つあります。This DAC scheduler has one thread to process requests.

B.B. 稼働率が高いシステムで表示スケジューラを監視するMonitoring nonhidden schedulers in a busy system

次のクエリでは、負荷が高い表示スケジューラの状態を示します。このスケジューラでは、利用可能なワーカーの処理数を上回る要求が存在します。The following query shows the state of heavily loaded nonhidden schedulers, where more requests exist than can be handled by available workers. この例では、256 のワーカーにタスクが割り当てられており、In this example, 256 workers are assigned tasks. 一部のタスクはワーカーへの割り当てを待機中です。Some tasks are waiting for an assignment to a worker. 実行可能なタスクの数が少ないということは、複数のタスクがリソースの待機中であることを意味します。Lower runnable count implies that multiple tasks are waiting for a resource.

注意

sys.dm_os_workers でクエリを実行すると、ワーカーの状態を確認できます。You can find the state of workers by querying sys.dm_os_workers. 詳細については、次を参照してください。 sys.dm_os_workers (TRANSACT-SQL)します。For more information, see sys.dm_os_workers (Transact-SQL).

クエリを次に示します。Here is the query:

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;  

以下に結果セットを示します。Here is the result set.

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  

これに比較して次の結果では、実行可能なタスクが複数あり、ワーカーの取得を待機中のタスクがないことが示されています。By comparison, the following result shows multiple runnable tasks where no task is waiting to obtain a worker. work_queue_count は両方のスケジューラで 0 になっています。The work_queue_count is 0 for both schedulers.

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  

参照See Also

SQL Server オペレーティング システム関連の動的管理ビュー (TRANSACT-SQL)SQL Server Operating System Related Dynamic Management Views (Transact-SQL)