sys.dm_os_workers (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Devuelve una fila por cada trabajador del sistema. Para obtener más información sobre los trabajadores, consulte la Guía de arquitectura de subprocesos y tareas.

Nota

Para llamar desde Azure Synapse Analytics o Analytics Platform System (PDW), use el nombre sys.dm_pdw_nodes_os_workers. El grupo de SQL sin servidor no admite esta sintaxis en Azure Synapse Analytics.

Nombre de la columna Tipo de datos Descripción
worker_address varbinary(8) Dirección de memoria del trabajador.
status int Exclusivamente para uso interno.
is_preemptive bit 1 = El trabajador está trabajando con un programa preferente. Un trabajador que ejecuta código externo trabaja con un programa preferente.
is_fiber bit 1 = El trabajador está trabajando con la opción de agrupación ligera. Para obtener más información, vea sp_configure (Transact-SQL).
is_sick bit 1 = El trabajador está atascado intentando obtener un bloqueo por subproceso. Si este bit está establecido, podría indicar un problema con la contención de un objeto al que se tiene acceso con frecuencia.
is_in_cc_exception bit 1 = El trabajador está controlando actualmente una excepción que no es de SQL Server.
is_fatal_exception bit Especifica si este trabajador recibió una excepción grave.
is_inside_catch bit 1 = El trabajador está controlando actualmente una excepción.
is_in_polling_io_completion_routine bit 1 = El trabajador está ejecutando actualmente una rutina de finalización de E/S de una E/S pendiente. Para obtener más información, consulte sys.dm_io_pending_io_requests (Transact-SQL).
context_switch_count int Número de cambios de contexto del programador realizados por este trabajador.
pending_io_count int Número de E/S físicas realizadas por este trabajador.
pending_io_byte_count bigint Número total de bytes de todas las E/S físicas pendientes de este trabajador.
pending_io_byte_average int Número promedio de bytes de las E/S físicas de este trabajador.
wait_started_ms_ticks bigint Momento, en ms_ticks, en que este trabajador ha iniciado el estado SUSPENDED. Si se resta este valor de ms_ticks en sys.dm_os_sys_info, se consigue el número de milisegundos que el trabajador ha estado esperando.
wait_resumed_ms_ticks bigint Momento, en ms_ticks, en que este trabajador ha iniciado el estado RUNNABLE. Si se resta este valor de ms_ticks en sys.dm_os_sys_info, se consigue el número de milisegundos que el trabajador ha estado en la cola de ejecutables.
task_bound_ms_ticks bigint Momento, en ms_ticks, en que una tarea se enlaza a este trabajador.
worker_created_ms_ticks bigint Momento, en ms_ticks, en que se crea un trabajador.
exception_num int Número de error de la última excepción que encontró este trabajador.
exception_severity int Gravedad de la última excepción que encontró este trabajador.
exception_address varbinary(8) Dirección del código que produjo la excepción
affinity bigint La afinidad de subprocesos del trabajador. Compara la afinidad del subproceso en sys.dm_os_threads (Transact-SQL).
state nvarchar(60) Estado del trabajador. Puede ser uno de los siguientes valores:

INIT = El trabajador se está inicializando actualmente.

RUNNING = El trabajador está trabajando de forma preferente o no preferente.

RUNNABLE = El trabajador está preparado para ejecutarse en el programador.

SUSPENDED = El trabajador está suspendido actualmente, esperando por un evento para enviarle una señal.
start_quantum bigint Tiempo en milisegundos al inicio de la ejecución actual de este trabajador.
end_quantum bigint Tiempo en milisegundos al final de la ejecución actual de este trabajador.
last_wait_type nvarchar(60) Tipo de la última espera. Para obtener una lista de tipos de espera, consulte sys.dm_os_wait_stats (Transact-SQL).
return_code int Valor devuelto de la última espera. Puede ser uno de los siguientes valores:

0 =SUCCESS

3 = DEADLOCK

4 = PREMATURE_WAKEUP

258 = TIMEOUT
quantum_used bigint Exclusivamente para uso interno.
max_quantum bigint Exclusivamente para uso interno.
boost_count int Exclusivamente para uso interno.
tasks_processed_count int Número de tareas procesadas por este trabajador.
fiber_address varbinary(8) Dirección de memoria de la fibra con la que está asociado este trabajador.

NULL = SQL Server no está configurado para agrupación ligera.
task_address varbinary(8) Dirección de memoria de la tarea actual. Para obtener más información, consulte sys.dm_os_tasks (Transact-SQL).
memory_object_address varbinary(8) Dirección de memoria del objeto de memoria del trabajador. Para más información, vea sys.dm_os_memory_objects (Transact-SQL).
thread_address varbinary(8) Dirección de memoria del subproceso asociado con este trabajador. Para obtener más información, consulte sys.dm_os_threads (Transact-SQL).
signal_worker_address varbinary(8) Dirección de memoria del último trabajador que indicó este objeto. Para obtener más información, consulte sys.dm_os_workers.
scheduler_address varbinary(8) Dirección de memoria del programador. Para obtener más información, consulte sys.dm_os_schedulers (Transact-SQL).
processor_group smallint Almacena el identificador de grupo de procesadores que está asignado a este subproceso.
pdw_node_id int Se aplica a: Azure Synapse Analytics, Sistema de la plataforma de análisis (PDW)

Identificador del nodo en el que se encuentra esta distribución.

Observaciones

Si el estado de trabajador es RUNNING y se está ejecutando de forma no preferente, la dirección del trabajador coincide con active_worker_address en sys.dm_os_schedulers.

Cuando se señala a un trabajador que espera en un evento, el trabajador se coloca al principio de la cola de ejecutables. SQL Server permite que suceda esto 1000 veces en una fila; después, el trabajador se coloca al final de la cola. Mover un trabajador al final de la cola tiene algunas implicaciones sobre el rendimiento.

Permisos

En SQL Server, se requiere el permiso VIEW SERVER STATE.
En los niveles Premium para SQL Database, se requiere el permiso VIEW DATABASE STATE en la base de datos. En los niveles Estándar y Básico de SQL Database, se requiere la pertenencia al rol Server Admin o a una cuenta de Azure Active Directory admin.

Permisos para SQL Server 2022 y versiones posteriores

Requiere el permiso VIEW SERVER PERFORMANCE STATE en el servidor.

Ejemplos

Puede utilizar la siguiente consulta para saber cuánto tiempo se ha estado ejecutando un trabajador en un estado SUSPENDED o 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;  

El conjunto de resultados es el siguiente:

 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  

En la salida, si w_runnable y w_suspended son iguales, indica el tiempo que el trabajador está en el estado SUSPENDED. De lo contrario, w_runnable representa el tiempo que ha pasado el trabajador en el estado RUNNABLE. En la salida, la sesión 52 está en estado SUSPENDED durante 35,094 milisegundos.

Consulte también

Vistas de administración dinámica relacionadas con el sistema operativo de SQL Server (Transact-SQL)
Guía de arquitectura de procesamiento de consultas
Guía de arquitectura de subprocesos y tareas