Поделиться через


sys.dm_os_schedulers (Transact-SQL)

Применимо: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure azure Synapse Analytics Analytics Platform System (PDW)

Возвращает одну строку для планировщика в SQL Server, где каждый планировщик сопоставляется с отдельным процессором. Используйте это представление для мониторинга состояния планировщика или для определения отклонившихся от расписания задач. Дополнительные сведения о планировщиках см. в руководстве по архитектуре потоков и задач.

Примечание.

Чтобы вызвать это из Azure Synapse Analytics или Analytics Platform System (PDW), используйте имя sys.dm_pdw_nodes_os_schedulers. Этот синтаксис не поддерживается бессерверным пулом SQL в Azure Synapse Analytics.

Имя столбца Тип данных Description
scheduler_address varbinary(8) Адрес памяти планировщика. Не допускает значение NULL.
parent_node_id int Идентификатор узла, к которому относится планировщик; этот узел еще называют родительским. Он является узлом с неоднородным доступом к памяти (NUMA). Не допускает значение NULL.
scheduler_id int Идентификатор планировщика. Все планировщики, используемые для выполнения обычных запросов, имеют идентификаторы меньше 1048576. Эти планировщики, имеющие идентификаторы, превышающие или равные 1048576, используются внутренне SQL Server, например планировщик подключения выделенного администратора. Не допускает значение NULL.
cpu_id smallint Идентификатор ЦП, присвоенный планировщику.

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

Примечание. 255 не указывает на сходство, как это было в SQL Server 2005 (9.x). Дополнительные сведения о сходстве см . в sys.dm_os_threads (Transact-SQL ).
статус nvarchar(60) Указывает состояние планировщика. Может использоваться одно из следующих значений:

- СКРЫТЫЙ ОНЛАЙН
— СКРЫТЫЙ АВТОНОМНЫЙ РЕЖИМ
- ВИДИМЫЙ В ИНТЕРНЕТЕ
— ВИДИМЫЙ АВТОНОМНЫЙ РЕЖИМ
— VISIBLE ONLINE (DAC)
- HOT_ADDED

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

Планировщики HIDDEN используются для обработки запросов, которые являются внутренними для ядро СУБД. Планировщики с состоянием VISIBLE — для обработки пользовательских запросов.

Планировщики с состоянием OFFLINE соответствуют процессорам, находящимся в маске схожести в режиме вне сети и поэтому не используемым для обработки запросов. Планировщики с состоянием ONLINE соответствуют процессорам, находящимся в маске схожести в режиме в сети и поэтому доступным для обработки потоков.

Состояние DAC указывает на то, что планировщик выполняется через выделенное административное соединение.

Состояние HOT ADDED указывает, что планировщики были добавлены в ответ на событие ЦП с поддержкой горячей замены.
is_online bit Если SQL Server настроен на использование только некоторых доступных процессоров на сервере, эта конфигурация может означать, что некоторые планировщики сопоставляются с процессорами, которые не находятся в маске сходства. Если это так, то этот столбец вернет 0. Это значение означает, что планировщик не используется для обработки запросов или пакетов.

Не допускает значение NULL.
is_idle bit 1 = планировщик находится в состоянии простоя. В настоящий момент не запущен ни один из исполнителей. Не допускает значение NULL.
preemptive_switches_count int Число переключений в режим с вытеснением исполнителей, обслуживаемых данным планировщиком.

Чтобы выполнить код, внешний по отношению к SQL Server (например, расширенную хранимую процедуру или распределенный запрос), поток должен выйти из-под управления планировщика, работающего в режиме без вытеснения. Для этого исполнитель переходит в режим с вытеснением.
context_switches_count int Число переключений контекста, выполненных на данном планировщике. Не допускает значение NULL.

Чтобы предоставить возможность выполнения другим исполнителям, работающий в настоящий момент исполнитель должен освободить планировщик или переключить контекст.

Примечание. Если работник дает планировщику и помещает себя в очередь запускаемой среды, а затем не находит других работников, он выберет себя. В этом случае обновляется значение yield_count, но не context_switches_count.
idle_switches_count int Число ситуаций, в которых планировщик ожидал события, находясь в состоянии простоя. Это значение аналогично значению context_switches_count. Не допускает значение NULL.
current_tasks_count int Количество задач, ассоциированных в настоящий момент с данным планировщиком. Этот счетчик включает:

— Задачи, ожидающие выполнения рабочей роли.
— Задачи, которые в настоящее время ожидают или выполняются (в состоянии SUSPENDED или RUNNABLE).

При завершении задачи этот счетчик уменьшается. Не допускает значение 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 Число операций ввода-вывода, ожидающих завершения. Каждый планировщик имеет список незавершенных операций ввода-вывода, проверяя при каждом переключении контекста, не завершены ли они. Этот счетчик увеличивается при поступлении запроса и уменьшается при завершении обработки запроса. Он не характеризует состояние операций ввода-вывода. Не допускает значение NULL.
load_factor int Внутреннее значение, характеризующее нагрузку на планировщик. Оно используется для распределения задач между планировщиками. Это значение может оказаться полезным при отладке в случае неравномерного распределения нагрузки между планировщиками. Решение о маршрутизации выполняется в зависимости от загрузки планировщика. SQL Server также использует коэффициент нагрузки узлов и планировщиков для определения оптимального расположения для получения ресурсов. Когда задача помещается в очередь, фактор нагрузки увеличивается. Когда задача завершается, фактор нагрузки уменьшается. Использование факторов нагрузки помогает ОС SQL Server лучше балансировать рабочую нагрузку. Не допускает значение NULL.
yield_count int Внутреннее значение, характеризующее ход выполнения работы на данном планировщике. Это значение используется монитором планировщиков для определения того, вовремя ли исполнитель уступает право на выполнение другим исполнителям. Оно не свидетельствует о передаче управления новому исполнителю. Не допускает значение NULL.
last_timer_activity bigint Время последней проверки очереди таймера планировщиком (в тактах ЦП). Не допускает значение NULL.
failed_to_create_worker bit Это значение устанавливается в 1, если на данном планировщике не удалось создать новый исполнитель. Как правило, это происходит из-за недостатка памяти. Допускает значение NULL.
active_worker_address varbinary(8) Адрес активного в настоящий момент исполнителя в памяти. Допускает значение NULL. Дополнительные сведения см. в разделе sys.dm_os_workers (Transact-SQL).
memory_object_address varbinary(8) Адрес объекта памяти планировщика. Не допускает значения NULL.
task_memory_object_address varbinary(8) Адрес объекта памяти задачи. Не допускает значение NULL. Дополнительные сведения см. в статье sys.dm_os_memory_objects (Transact-SQL).
quantum_length_us bigint Указано только в ознакомительных целях. Не поддерживается. Совместимость с будущими версиями не гарантируется. Предоставляет квантовый планировщик, используемый SQLOS.
total_cpu_usage_ms bigint Область применения: SQL Server 2016 (13.x) и более поздних версий

Общий объем ресурсов ЦП, потребляемых этим планировщиком, как сообщается непреобразуемыми работниками. Не допускает значение NULL.
total_cpu_idle_capped_ms bigint Указано только в ознакомительных целях. Не поддерживается. Совместимость с будущими версиями не гарантируется. Указывает, что регулирование на основе цели уровня обслуживания всегда будет равно 0 для версий SQL Server, отличных от Azure. Допускает значение NULL.
total_scheduler_delay_ms bigint Область применения: SQL Server 2016 (13.x) и более поздних версий

Время между одной рабочей ролью переключения и другим переключением. Может быть вызвана задержкой планирования следующей непрекционной рабочей роли или из-за потоков планирования ОС из других процессов. Не допускает значение NULL.
ideal_workers_limit int Область применения: SQL Server 2019 (15.x) и более поздних версий

Сколько работников в идеале должно быть на планировщике. Если текущие работники превышают предел из-за несбалансированной нагрузки задачи, после того как они становятся неактивными, они будут обрезаны. Не допускает значение NULL.
pdw_node_id int Область применения: Azure Synapse Analytics, Analytics Platform System (PDW)

Идентификатор узла, на который находится данное распределение.

Разрешения

На SQL Server и управляемом экземпляре SQL необходимо разрешение VIEW SERVER STATE.

Для целей службы База данных SQL Basic, S0 и S1, а также для баз данных в эластичных пулах, учетной записи администратора сервера, учетной записи администратора Microsoft Entra или членства в ##MS_ServerStateReader## роли сервера требуется. Для всех остальных целей обслуживания базы данных SQL требуется разрешение VIEW DATABASE STATE в базе данных или членство в роли сервера ##MS_ServerStateReader##.

Разрешения для SQL Server 2022 и более поздних версий

Требуется разрешение VIEW SERVER PERFORMANCE STATE на сервере.

Примеры

А. Наблюдение за скрытыми и видимыми планировщиками

Следующий запрос выводит состояние рабочих и задач в SQL Server во всех планировщиках. Этот запрос был выполнен на компьютере со следующей конфигурацией:

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

  • два узла NUMA

  • один ЦП на узел NUMA

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

Вывод содержит следующие сведения.

  • Существует пять планировщиков. Два планировщика имеют значение < идентификатора 1048576. Планировщики с идентификатором >= 1048576 называются скрытыми планировщиками. Планировщик 255 предусматривает применение выделенного административного соединения (DAC). Имеется по одному планировщику выделенного административного соединения (DAC) на каждый экземпляр. Мониторы использования ресурсов, координирующие загрузку памяти, используют планировщики 257 и 258, по одному на каждый узел NUMA.

  • Вывод содержит 23 активные задачи. Эти задачи включают запросы пользователей в дополнение к задачам управления ресурсами, которые были запущены SQL Server. Примерами задач SQL Server являются RESOURCE MONITOR (один на узел NUMA), LAZY WRITER (один на узел NUMA), LOCK MONITOR, CHECKPOINT и LOG WRITER.

  • Узел NUMA 0 сопоставлен ЦП 1, а узел NUMA 1 сопоставлен ЦП 0. SQL Server обычно запускается на узле NUMA, отличном от узла 0.

  • При значении runnable_tasks_count, равном 0, активные выполняемые задачи отсутствуют. Однако могут присутствовать активные сеансы.

  • С планировщиком 255, представляющим выделенное административное соединение (DAC), связано 3 исполнителя. Эти рабочие роли выделяются при запуске SQL Server и не изменяются. Они используются только для обработки запросов выделенного административного соединения (DAC) . Две задачи этого планировщика представляют собой диспетчер соединений и простаивающий исполнитель.

  • active_workers_count представляет всех рабочих ролей, имеющих связанные задачи и выполняющихся в режиме без предварительной подготовки. Некоторые задачи, например средства прослушивания сети, запускаются планировщиком в режиме с вытеснением.

  • Скрытые планировщики не обрабатывают стандартные запросы пользователей. Исключением является планировщик выделенного административного соединения (DAC). Этот планировщик имеет один поток для обработки запросов.

B. Наблюдение за видимыми планировщиками в загруженной системе

Следующий запрос демонстрирует состояние чрезмерно загруженных видимых планировщиков, при котором имеется больше запросов, чем могут обработать доступные исполнители. В данном примере задачи назначены 256 исполнителям. Некоторые задачи ожидают назначения исполнителю. Небольшое число готовых к запуску задач неявно подразумевает, что множество задач ожидают выделения ресурса.

Примечание.

Состояние исполнителей можно получить путем запроса к представлению sys.dm_os_workers. Дополнительные сведения см. в разделе sys.dm_os_workers (Transact-SQL).

Запрос:

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 (Transact-SQL)