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

ОБЛАСТЬ ПРИМЕНЕНИЯ:даSQL Server (начиная с 2008)даБаза данных SQL AzureдаХранилище данных SQL AzureдаParallel Data WarehouseAPPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Возвращает по одной строке для каждого планировщика SQL ServerSQL Server, сопоставленного с отдельным процессором.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.

Примечание

Вызывать его из Хранилище данных SQL AzureAzure SQL Data Warehouse или Параллельное хранилище данныхParallel Data Warehouse, используйте имя sys.dm_pdw_nodes_os_schedulers.To call this from Хранилище данных SQL AzureAzure SQL Data Warehouse or Параллельное хранилище данныхParallel 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 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 of the scheduler. Все планировщики, используемые для выполнения обычных запросов, имеют идентификаторы меньше 1048576.All schedulers that are used to run regular queries have ID numbers less than 1048576. Планировщики с идентификаторами, равными 255 или превышающими это значение, используются внутренними механизмами 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 assigned to the scheduler.

Не допускает значение NULL.Is not nullable.

Примечание: 255 не указывает без сопоставления, как в SQL Server 2005SQL Server 2005.Note: 255 does not indicate no affinity as it did in SQL Server 2005SQL Server 2005. См. в разделе 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
-ВИДИМЫМ ONLINE- VISIBLE ONLINE
-ВИДИМЫМИ ВНЕ СЕТИ- VISIBLE OFFLINE
-ВИДИМЫМ ONLINE (DAC)- VISIBLE ONLINE (DAC)
-HOT_ADDED- HOT_ADDED

Не допускает значение NULL.Is not nullable.

Планировщики с состоянием HIDDEN используются для обработки внутренних запросов компонента Компонент Database EngineDatabase Engine.HIDDEN schedulers are used to process requests that are internal to the Компонент Database EngineDatabase 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 указывает, что планировщики были добавлены в ответ на событие ЦП с поддержкой горячей замены.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. В этом случае обновляется значение yield_count, но не context_switches_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).

При завершении задачи этот счетчик уменьшается.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 Число операций ввода-вывода, ожидающих завершения.Number of pending I/Os that are waiting to be completed. Каждый планировщик имеет список незавершенных операций ввода-вывода, проверяя при каждом переключении контекста, не завершены ли они.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. Этот счетчик увеличивается при поступлении запросаThe count is incremented when the request is inserted. и уменьшается при завершении обработки запроса.This count is decremented when the request is completed. Он не характеризует состояние операций ввода-вывода.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 используется фактор нагрузки на узлы и планировщики. 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 эффективнее выполнять балансирование нагрузки.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 Время последней проверки очереди таймера планировщиком (в тактах ЦП).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.
pdw_node_idpdw_node_id intint Применяется к: Хранилище данных SQL AzureAzure SQL Data Warehouse, Параллельное хранилище данныхParallel Data WarehouseApplies to: Хранилище данных SQL AzureAzure SQL Data Warehouse, Параллельное хранилище данныхParallel 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.
На База данных SQLSQL Database, требуется VIEW DATABASE STATE разрешение в базе данных.On База данных SQLSQL 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:

  • два процессора (ЦП)Two processors (CPUs)

  • два узла NUMATwo (NUMA) nodes

  • один ЦП на узел NUMAOne CPU per NUMA node

  • маска схожести 0x03Affinity 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:

  • Имеется пять планировщиков.There are five schedules. Двум планировщикам назначены идентификаторы со значением < 1048576.Two schedulers have an ID value < 1048576. Планировщики с идентификатором >= 1048576 известны как скрытые.Schedulers with ID >= 1048576are known as hidden schedulers. Планировщик 255 предусматривает применение выделенного административного соединения (DAC).Scheduler 255 represents the dedicated administrator connection (DAC). Имеется по одному планировщику выделенного административного соединения (DAC) на каждый экземпляр.There is one DAC scheduler per instance. Мониторы использования ресурсов, координирующие загрузку памяти, используют планировщики 257 и 258, по одному на каждый узел NUMA.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 являются RESOURCE MONITOR (одна на каждый узел NUMA), LAZY WRITER (одна на каждый узел NUMA), LOCK MONITOR, CHECKPOINT и LOG WRITER.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 сопоставлен ЦП 1, а узел NUMA 1 сопоставлен ЦП 0.NUMA node 0 is mapped to CPU 1 and NUMA node 1 is mapped to CPU 0. SQL ServerSQL Server обычно сначала использует узел NUMA, отличный от узла 0. typically starts on a NUMA node other than node 0.

  • При значении runnable_tasks_count, равном 0, активные выполняемые задачи отсутствуют.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. Две задачи этого планировщика представляют собой диспетчер соединений и простаивающий исполнитель.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. Этот планировщик имеет один поток для обработки запросов.This DAC scheduler has one thread to process requests.

Б.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)