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)
Руководство по архитектуре обработки запросов
Руководство по архитектуре потоков и задач