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


sys.dm_os_workers (Transact-SQL)

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

Возвращает строку для каждого исполнителя в системе. Дополнительные сведения о рабочих ролях см. в руководстве по архитектуре потоков и задач.

Примечание.

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

Имя столбца Тип данных Description
worker_address varbinary(8) Адрес памяти исполнителя.
статус int Только для внутреннего применения.
is_preemptive bit 1 = исполнитель работает по расписанию с вытеснением. Любой исполнитель, запускающий внешний код, работает по расписанию с вытеснением.
is_fiber bit 1 = исполнитель работает с использованием упрощенных пулов. Дополнительные сведения см. в статье sp_configure (Transact-SQL).
is_sick bit 1 = работа исполнителя приостановлена при попытке получить спин-блокировку. Такое значение этого параметра может указывать на проблему конфликта в связи с объектом, к которому часто запрашивается доступ.
is_in_cc_exception bit 1 = рабочая роль обрабатывает исключение, не являющееся исключением SQL Server.
is_fatal_exception bit Указывает на получение этим исполнителем неустранимого исключения.
is_inside_catch bit 1 = исполнитель в настоящий момент обрабатывает исключение.
is_in_polling_io_completion_routine bit 1 = исполнитель в настоящий момент выполняет подпрограмму завершения для незавершенного ввода-вывода. Дополнительные сведения см. в разделе sys.dm_io_pending_io_requests (Transact-SQL).
context_switch_count int Количество переключений контекста планировщика, выполненных этим исполнителем.
pending_io_count int Количество физических операций ввода-вывода, выполненных этим исполнителем.
pending_io_byte_count bigint Общее число байтов для всех незавершенных физических вводов-выводов для этого исполнителя.
pending_io_byte_average int Среднее число байтов для всех физических вводов-выводов для этого исполнителя.
wait_started_ms_ticks bigint Момент времени в ms_ticks, когда данная рабочая роль перешла в состояние SUSPENDED. Вычтя это значение из поля ms_ticks в sys.dm_os_sys_info, можно получить время ожидания для этой рабочей роли в миллисекундах.
wait_resumed_ms_ticks bigint Момент времени в ms_ticks, когда данная рабочая роль перешла в состояние RUNNABLE. Вычтя это значение из поля ms_ticks в sys.dm_os_sys_info, можно получить время нахождения этой рабочей роли в очереди ожидания запуска.
task_bound_ms_ticks bigint Момент времени в ms_ticks, когда задача была связана с этой рабочей ролью.
worker_created_ms_ticks bigint Момент времени в ms_ticks, когда была создана эта рабочая роль.
exception_num int Номер ошибки последнего исключения, возникшего у этого исполнителя.
exception_severity int Серьезность последнего исключения, возникшего у этого исполнителя.
exception_address varbinary(8) Адрес кода, откуда было получено исключение
affinity bigint Сходство рабочих потоков. Соответствует сходству потока в sys.dm_os_threads (Transact-SQL).
state nvarchar(60) Состояние исполнителя. Может использоваться одно из следующих значений:

INIT = исполнитель в настоящий момент инициализируется.

RUNNING = исполнитель в настоящий момент выполняется, в режиме без приоритетного прерывания или с приоритетным прерыванием.

RUNNABLE = исполнитель готов к запуску в соответствии с планировщиком.

SUSPENDED = исполнитель в настоящий момент приостановлен, находится в режиме ожидания сигнала от события.
start_quantum bigint Время начала текущего выполнения этого исполнителя (в миллисекундах).
end_quantum bigint Время окончания текущего выполнения этого исполнителя (в миллисекундах).
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 Количество задач, обработанных этим исполнителем.
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) Адрес памяти потока, связанного с этим исполнителем. Дополнительные сведения см. в разделе sys.dm_os_threads (Transact-SQL).
signal_worker_address varbinary(8) Адрес памяти исполнителя, который последним подавал сигнал этому объекту. Дополнительные сведения см. в разделе sys.dm_os_workers.
scheduler_address varbinary(8) Адрес памяти планировщика. Дополнительные сведения см. в разделе sys.dm_os_schedulers (Transact-SQL).
processor_group smallint Сохраняет идентификатор группы процессоров, назначенный данному потоку.
pdw_node_id int Область применения: Azure Synapse Analytics, Analytics Platform System (PDW)

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

Замечания

Если значением состояния исполнителя является RUNNING, и исполнитель выполняется в режиме без приоритетного прерывания, адрес исполнителя совпадает со значением active_worker_address в sys.dm_os_schedulers.

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

Разрешения

В SQL Server требуется разрешение VIEW SERVER STATE.
Для уровней "Премиум" Базы данных SQL требуется разрешение VIEW DATABASE STATE в базе данных. Для уровней "Стандартный" и "Базовый" Базы данных SQL требуется членство в роли 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 равны, они представляют время, которое исполнитель находится в состоянии SUSPENDED. Иначе переменная w_runnable представляет время, проведенное исполнителем в состоянии RUNNABLE. На выходе, сеанс 52 находится в состоянии SUSPENDED в течение 35,094 миллисекунд.

См. также

Динамические административные представления операционной системы SQL Server (Transact-SQL)
Руководство по архитектуре обработки запросов
Руководство по архитектуре потоков и задач