sys.dm_os_workers (Transact-SQL)sys.dm_os_workers (Transact-SQL)

Применимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions) ДаБаза данных SQL AzureAzure SQL DatabaseYesБаза данных SQL AzureAzure SQL Database ДаУправляемый экземпляр SQL AzureAzure SQL Managed InstanceYesУправляемый экземпляр SQL AzureAzure SQL Managed Instance даAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics даПараллельное хранилище данныхParallel Data WarehouseyesПараллельное хранилище данныхParallel Data WarehouseПрименимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions) ДаБаза данных SQL AzureAzure SQL DatabaseYesБаза данных SQL AzureAzure SQL Database ДаУправляемый экземпляр SQL AzureAzure SQL Managed InstanceYesУправляемый экземпляр SQL AzureAzure SQL Managed Instance даAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics даПараллельное хранилище данныхParallel Data WarehouseyesПараллельное хранилище данныхParallel Data Warehouse

Возвращает строку для каждого исполнителя в системе.Returns a row for every worker in the system. Дополнительные сведения о рабочих ролях см. в разделе " архитектура потоков и задач".For more information about workers, see the Thread and Task Architecture Guide.

Примечание

Чтобы вызвать эту функцию из Azure Synapse Analytics (Хранилище данных SQL)Azure Synapse Analytics (SQL Data Warehouse) или Параллельное хранилище данныхParallel Data Warehouse , используйте имя sys. dm_pdw_nodes_os_workers.To call this from Azure Synapse Analytics (Хранилище данных SQL)Azure Synapse Analytics (SQL Data Warehouse) or Параллельное хранилище данныхParallel Data Warehouse, use the name sys.dm_pdw_nodes_os_workers.

Имя столбцаColumn name Тип данныхData type ОписаниеDescription
worker_addressworker_address varbinary(8)varbinary(8) Адрес памяти исполнителя.Memory address of the worker.
statusstatus intint Только для внутреннего применения.Internal use only.
is_preemptiveis_preemptive bitbit 1 = исполнитель работает по расписанию с вытеснением.1 = Worker is running with preemptive scheduling. Любой исполнитель, запускающий внешний код, работает по расписанию с вытеснением.Any worker that is running external code is run under preemptive scheduling.
is_fiberis_fiber bitbit 1 = исполнитель работает с использованием упрощенных пулов.1 = Worker is running with lightweight pooling. Дополнительные сведения см. в подразделе sp_configure (Transact-SQL).For more information, see sp_configure (Transact-SQL).
is_sickis_sick bitbit 1 = работа исполнителя приостановлена при попытке получить спин-блокировку.1 = Worker is stuck trying to obtain a spin lock. Такое значение этого параметра может указывать на проблему конфликта в связи с объектом, к которому часто запрашивается доступ.If this bit is set, this might indicate a problem with contention on a frequently accessed object.
is_in_cc_exceptionis_in_cc_exception bitbit 1 = исполнитель обрабатывает исключение, не являющееся исключением SQL ServerSQL Server.1 = Worker is currently handling a non-SQL ServerSQL Server exception.
is_fatal_exceptionis_fatal_exception bitbit Указывает на получение этим исполнителем неустранимого исключения.Specifies whether this worker received a fatal exception.
is_inside_catchis_inside_catch bitbit 1 = исполнитель в настоящий момент обрабатывает исключение.1 = Worker is currently handling an exception.
is_in_polling_io_completion_routineis_in_polling_io_completion_routine bitbit 1 = исполнитель в настоящий момент выполняет подпрограмму завершения для незавершенного ввода-вывода.1 = Worker is currently running an I/O completion routine for a pending I/O. Дополнительные сведения см. в разделе sys. dm_io_pending_io_requests ()Transact-SQL .For more information, see sys.dm_io_pending_io_requests (Transact-SQL).
context_switch_countcontext_switch_count intint Количество переключений контекста планировщика, выполненных этим исполнителем.Number of scheduler context switches that are performed by this worker.
pending_io_countpending_io_count intint Количество физических операций ввода-вывода, выполненных этим исполнителем.Number of physical I/Os that are performed by this worker.
pending_io_byte_countpending_io_byte_count bigintbigint Общее число байтов для всех незавершенных физических вводов-выводов для этого исполнителя.Total number of bytes for all pending physical I/Os for this worker.
pending_io_byte_averagepending_io_byte_average intint Среднее число байтов для всех физических вводов-выводов для этого исполнителя.Average number of bytes for physical I/Os for this worker.
wait_started_ms_tickswait_started_ms_ticks bigintbigint Момент времени, в ms_ticks, когда этот рабочий процесс перешел в состояние SUSPENDED.Point in time, in ms_ticks, when this worker entered the SUSPENDED state. Вычитание этого значения из ms_ticks в sys. dm_os_sys_info возвращает число миллисекунд, в течение которых Рабочая роль была в состоянии ожидания.Subtracting this value from ms_ticks in sys.dm_os_sys_info returns the number of milliseconds that the worker has been waiting.
wait_resumed_ms_tickswait_resumed_ms_ticks bigintbigint Момент времени, в ms_ticks, когда этот рабочий процесс перешел в состояние готовности к запуску.Point in time, in ms_ticks, when this worker entered the RUNNABLE state. Вычитание этого значения из ms_ticks в sys. dm_os_sys_info возвращает число миллисекунд, в течение которых Рабочая роль находится в готовой очереди.Subtracting this value from ms_ticks in sys.dm_os_sys_info returns the number of milliseconds that the worker has been in the runnable queue.
task_bound_ms_tickstask_bound_ms_ticks bigintbigint Момент времени, в ms_ticks, когда задача привязана к этому рабочему процессу.Point in time, in ms_ticks, when a task is bound to this worker.
worker_created_ms_ticksworker_created_ms_ticks bigintbigint Момент времени, в ms_ticks, при создании рабочей роли.Point in time, in ms_ticks, when a worker is created.
exception_numexception_num intint Номер ошибки последнего исключения, возникшего у этого исполнителя.Error number of the last exception that this worker encountered.
exception_severityexception_severity intint Серьезность последнего исключения, возникшего у этого исполнителя.Severity of the last exception that this worker encountered.
exception_addressexception_address varbinary(8)varbinary(8) Адрес кода, откуда было получено исключениеCode address that threw the exception
affinityaffinity bigintbigint Сходство рабочих потоков.The thread affinity of the worker. Соответствует сходству потока в sys. dm_os_threads ()Transact-SQL .Matches the affinity of the thread in sys.dm_os_threads (Transact-SQL).
Состояниеstate nvarchar(60)nvarchar(60) Состояние исполнителя.Worker state. Может иметь одно из следующих значений:Can be one of the following values:

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

RUNNING = исполнитель в настоящий момент выполняется, в режиме без приоритетного прерывания или с приоритетным прерыванием.RUNNING = Worker is currently running either nonpreemptively or preemptively.

RUNNABLE = исполнитель готов к запуску в соответствии с планировщиком.RUNNABLE = The worker is ready to run on the scheduler.

SUSPENDED = исполнитель в настоящий момент приостановлен, находится в режиме ожидания сигнала от события.SUSPENDED = The worker is currently suspended, waiting for an event to send it a signal.
start_quantumstart_quantum bigintbigint Время начала текущего выполнения этого исполнителя (в миллисекундах).Time, in milliseconds, at the start of the current run of this worker.
end_quantumend_quantum bigintbigint Время окончания текущего выполнения этого исполнителя (в миллисекундах).Time, in milliseconds, at the end of the current run of this worker.
last_wait_typelast_wait_type nvarchar(60)nvarchar(60) Тип последнего ожидания.Type of last wait. Список типов ожидания см. в разделе sys. dm_os_wait_stats ()Transact-SQL .For a list of wait types, see sys.dm_os_wait_stats (Transact-SQL).
return_codereturn_code intint Возвращенное значение от последнего ожидания.Return value from last wait. Может иметь одно из следующих значений:Can be one of the following values:

0 =SUCCESS0 =SUCCESS

3 = DEADLOCK3 = DEADLOCK

4 = PREMATURE_WAKEUP4 = PREMATURE_WAKEUP

258 = TIMEOUT258 = TIMEOUT
quantum_usedquantum_used bigintbigint Только для внутреннего применения.Internal use only.
max_quantummax_quantum bigintbigint Только для внутреннего применения.Internal use only.
boost_countboost_count intint Только для внутреннего применения.Internal use only.
tasks_processed_counttasks_processed_count intint Количество задач, обработанных этим исполнителем.Number of tasks that this worker processed.
fiber_addressfiber_address varbinary(8)varbinary(8) Адрес памяти волокна, с которым связан этот исполнитель.Memory address of the fiber with which this worker is associated.

NULL = SQL ServerSQL Server не настроен для использования упрощенных пулов.NULL = SQL ServerSQL Server is not configured for lightweight pooling.
task_addresstask_address varbinary(8)varbinary(8) Адрес памяти текущей задачи.Memory address of the current task. Дополнительные сведения см. в разделе sys. dm_os_tasks ()Transact-SQL .For more information, see sys.dm_os_tasks (Transact-SQL).
memory_object_addressmemory_object_address varbinary(8)varbinary(8) Адрес памяти объекта памяти исполнителя.Memory address of the worker memory object. Дополнительные сведения см. в разделе sys. dm_os_memory_objects ()Transact-SQL .For more information, see sys.dm_os_memory_objects (Transact-SQL).
thread_addressthread_address varbinary(8)varbinary(8) Адрес памяти потока, связанного с этим исполнителем.Memory address of the thread associated with this worker. Дополнительные сведения см. в разделе sys. dm_os_threads ()Transact-SQL .For more information, see sys.dm_os_threads (Transact-SQL).
signal_worker_addresssignal_worker_address varbinary(8)varbinary(8) Адрес памяти исполнителя, который последним подавал сигнал этому объекту.Memory address of the worker that last signaled this object. Дополнительные сведения см. в разделе sys. dm_os_workers.For more information, see sys.dm_os_workers.
scheduler_addressscheduler_address varbinary(8)varbinary(8) Адрес памяти планировщика.Memory address of the scheduler. Дополнительные сведения см. в разделе sys. dm_os_schedulers ()Transact-SQL .For more information, see sys.dm_os_schedulers (Transact-SQL).
processor_groupprocessor_group smallintsmallint Сохраняет идентификатор группы процессоров, назначенный данному потоку.Stores the processor group ID that is assigned to this thread.
pdw_node_idpdw_node_id intint Применимо к: Azure Synapse Analytics (Хранилище данных SQL)Azure Synapse Analytics (SQL Data Warehouse) , Параллельное хранилище данныхParallel Data WarehouseApplies to: Azure Synapse Analytics (Хранилище данных SQL)Azure Synapse Analytics (SQL Data Warehouse), Параллельное хранилище данныхParallel Data Warehouse

Идентификатор узла, на котором находится данное распределение.The identifier for the node that this distribution is on.

ПримечанияRemarks

Если значением состояния исполнителя является RUNNING, и исполнитель выполняется в режиме без приоритетного прерывания, адрес исполнителя совпадает со значением active_worker_address в sys.dm_os_schedulers.If the worker state is RUNNING and the worker is running nonpreemptively, the worker address matches the active_worker_address in sys.dm_os_schedulers.

Когда исполнитель, ожидающий события, получает сигнал, он помещается в начало очереди готовых к работе исполнителей.When a worker that is waiting on an event is signaled, the worker is placed at the head of the runnable queue. SQL ServerSQL Server разрешает делать это тысячу раз подряд, после чего исполнитель помещается в конец очереди.allows for this to happen one thousand times in a row, after which the worker is placed at the end of the queue. Перемещение исполнителя в конец очереди имеет некоторые последствия для производительности.Moving a worker to the end of the queue has some performance implications.

РазрешенияPermissions

В SQL ServerSQL Server необходимо VIEW SERVER STATE разрешение.On SQL ServerSQL Server, requires VIEW SERVER STATE permission.
На База данных SQLSQL Database уровнях Premium требуется VIEW DATABASE STATE разрешение в базе данных.On База данных SQLSQL Database Premium Tiers, requires the VIEW DATABASE STATE permission in the database. На База данных SQLSQL Database уровнях Standard и Basic требуется Server Admin членство в роли или Azure Active Directory admin учетная запись.On База данных SQLSQL Database Standard and Basic Tiers, requires the Server Admin role membership, or an Azure Active Directory admin account.

ПримерыExamples

Можно воспользоваться следующим запросом, чтобы определить, как долго исполнитель находился в состояниях SUSPENDED и RUNNABLE.You can use the following query to find out how long a worker has been running in a SUSPENDED or RUNNABLE state.

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;  

Результирующий набор:Here is the result set.

 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.In the output, when w_runnable and w_suspended are equal, this represents the time that the worker is in the SUSPENDED state. Иначе переменная w_runnable представляет время, проведенное исполнителем в состоянии RUNNABLE.Otherwise, w_runnable represents the time that is spent by the worker in the RUNNABLE state. На выходе, сеанс 52 находится в состоянии SUSPENDED в течение 35,094 миллисекунд.In the output, session 52 is SUSPENDED for 35,094 milliseconds.

См. такжеSee Also

SQL Server динамические административные представления, связанные с операционной системой ()Transact-SQL SQL Server Operating System Related Dynamic Management Views (Transact-SQL)
Руководство по архитектуре обработки запросов Query Processing Architecture Guide
Руководство по архитектуре потоков и задачThread and Task Architecture Guide