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

ESTE TEMA SE APLICA A: síSQL Server (a partir de 2008)síAzure SQL DatabasesíAzure SQL Data Warehouse síAlmacenamiento de datos paralelos THIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

Devuelve una fila por cada trabajador del sistema.Returns a row for every worker in the system.

Nota

Para llamar a esta desde Almacenamiento de datos SQL de AzureAzure SQL Data Warehouse o Almacenamiento de datos paralelosParallel Data Warehouse, use el nombre sys.dm_pdw_nodes_os_workers.To call this from Almacenamiento de datos SQL de AzureAzure SQL Data Warehouse or Almacenamiento de datos paralelosParallel Data Warehouse, use the name sys.dm_pdw_nodes_os_workers.

Nombre de columnaColumn name Tipo de datosData type DescriptionDescription
worker_addressworker_address varbinary (8)varbinary(8) Dirección de memoria del trabajador.Memory address of the worker.
statusstatus intint Exclusivamente para uso interno.Internal use only.
is_preemptiveis_preemptive bitbit 1 = El trabajador está trabajando con un programa preferente.1 = Worker is running with preemptive scheduling. Un trabajador que ejecuta código externo trabaja con un programa preferente.Any worker that is running external code is run under preemptive scheduling.
is_fiberis_fiber bitbit 1 = El trabajador está trabajando con la opción de agrupación ligera.1 = Worker is running with lightweight pooling. Para obtener más información, vea sp_configure (Transact-SQL).For more information, see sp_configure (Transact-SQL).
is_sickis_sick bitbit 1 = El trabajador está atascado intentando obtener un bloqueo por subproceso.1 = Worker is stuck trying to obtain a spin lock. Si este bit está establecido, podría indicar un problema con la contención de un objeto al que se tiene acceso con frecuencia.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 = El trabajador está controlando actualmente una excepción que no es de SQL ServerSQL Server.1 = Worker is currently handling a non- SQL ServerSQL Server exception.
is_fatal_exceptionis_fatal_exception bitbit Especifica si este trabajador recibió una excepción grave.Specifies whether this worker received a fatal exception.
is_inside_catchis_inside_catch bitbit 1 = El trabajador está controlando actualmente una excepción.1 = Worker is currently handling an exception.
is_in_polling_io_completion_routineis_in_polling_io_completion_routine bitbit 1 = El trabajador está ejecutando actualmente una rutina de finalización de E/S de una E/S pendiente.1 = Worker is currently running an I/O completion routine for a pending I/O. Para obtener más información, consulte 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 Número de cambios de contexto del programador realizados por este trabajador.Number of scheduler context switches that are performed by this worker.
pending_io_countpending_io_count intint Número de E/S físicas realizadas por este trabajador.Number of physical I/Os that are performed by this worker.
pending_io_byte_countpending_io_byte_count bigintbigint Número total de bytes de todas las E/S físicas pendientes de este trabajador.Total number of bytes for all pending physical I/Os for this worker.
pending_io_byte_averagepending_io_byte_average intint Número promedio de bytes de las E/S físicas de este trabajador.Average number of bytes for physical I/Os for this worker.
wait_started_ms_tickswait_started_ms_ticks bigintbigint Punto en el tiempo, en ms_ticks, cuando este trabajo entró en estado suspendido.Point in time, in ms_ticks, when this worker entered the SUSPENDED state. Si se resta este valor de ms_ticks en sys.dm_os_sys_info devuelve el número de milisegundos que el trabajador ha estado esperando.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 Punto en el tiempo, en ms_ticks, cuando este trabajo entró en estado ejecutable.Point in time, in ms_ticks, when this worker entered the RUNNABLE state. Si se resta este valor de ms_ticks en sys.dm_os_sys_info devuelve el número de milisegundos que el trabajador ha estado en la cola de ejecutables.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 Punto en el tiempo, en ms_ticks, cuando una tarea está enlazada a este trabajo.Point in time, in ms_ticks, when a task is bound to this worker.
worker_created_ms_ticksworker_created_ms_ticks bigintbigint Punto en el tiempo, en ms_ticks, cuando se crea un trabajo.Point in time, in ms_ticks, when a worker is created.
exception_numexception_num intint Número de error de la última excepción que encontró este trabajador.Error number of the last exception that this worker encountered.
exception_severityexception_severity intint Gravedad de la última excepción que encontró este trabajador.Severity of the last exception that this worker encountered.
exception_addressexception_address varbinary (8)varbinary(8) Dirección del código que produjo la excepciónCode address that threw the exception
affinityaffinity bigintbigint La afinidad de subprocesos del trabajador.The thread affinity of the worker. Coincide con la afinidad del subproceso de sys.dm_os_threads ( Transact-SQL ) .Matches the affinity of the thread in sys.dm_os_threads (Transact-SQL).
statestate nvarchar (60)nvarchar(60) Estado del trabajador.Worker state. Puede ser uno de los siguientes valores:Can be one of the following values:

INIT = El trabajador se está inicializando actualmente.INIT = Worker is currently being initialized.

RUNNING = El trabajador está trabajando de forma preferente o no preferente.RUNNING = Worker is currently running either nonpreemptively or preemptively.

RUNNABLE = El trabajador está preparado para ejecutarse en el programador.RUNNABLE = The worker is ready to run on the scheduler.

SUSPENDED = El trabajador está suspendido actualmente, esperando por un evento para enviarle una señal.SUSPENDED = The worker is currently suspended, waiting for an event to send it a signal.
start_quantumstart_quantum bigintbigint Tiempo en milisegundos al inicio de la ejecución actual de este trabajador.Time, in milliseconds, at the start of the current run of this worker.
end_quantumend_quantum bigintbigint Tiempo en milisegundos al final de la ejecución actual de este trabajador.Time, in milliseconds, at the end of the current run of this worker.
last_wait_typelast_wait_type nvarchar (60)nvarchar(60) Tipo de la última espera.Type of last wait. Para obtener una lista de tipos de espera, vea 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 Valor devuelto de la última espera.Return value from last wait. Puede ser uno de los siguientes valores: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 Exclusivamente para uso interno.Internal use only.
max_quantummax_quantum bigintbigint Exclusivamente para uso interno.Internal use only.
boost_countboost_count intint Exclusivamente para uso interno.Internal use only.
tasks_processed_counttasks_processed_count intint Número de tareas procesadas por este trabajador.Number of tasks that this worker processed.
fiber_addressfiber_address varbinary (8)varbinary(8) Dirección de memoria de la fibra con la que está asociado este trabajador.Memory address of the fiber with which this worker is associated.

NULL = SQL ServerSQL Server no está configurado para agrupación ligera.NULL = SQL ServerSQL Server is not configured for lightweight pooling.
task_addresstask_address varbinary (8)varbinary(8) Dirección de memoria de la tarea actual.Memory address of the current task. Para obtener más información, consulte 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) Dirección de memoria del objeto de memoria del trabajador.Memory address of the worker memory object. Para obtener más información, consulte 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) Dirección de memoria del subproceso asociado con este trabajador.Memory address of the thread associated with this worker. Para obtener más información, consulte 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) Dirección de memoria del último trabajador que indicó este objeto.Memory address of the worker that last signaled this object. Para obtener más información, consulte sys.dm_os_workers.For more information, see sys.dm_os_workers.
scheduler_addressscheduler_address varbinary (8)varbinary(8) Dirección de memoria del programador.Memory address of the scheduler. Para obtener más información, consulte sys.dm_os_schedulers ( Transact-SQL ) .For more information, see sys.dm_os_schedulers (Transact-SQL).
processor_groupprocessor_group smallintsmallint Almacena el identificador de grupo de procesadores que está asignado a este subproceso.Stores the processor group ID that is assigned to this thread.
pdw_node_idpdw_node_id intint Se aplica a: Almacenamiento de datos SQL de AzureAzure SQL Data Warehouse, Almacenamiento de datos paralelosParallel Data WarehouseApplies to: Almacenamiento de datos SQL de AzureAzure SQL Data Warehouse, Almacenamiento de datos paralelosParallel Data Warehouse

El identificador para el nodo que se encuentra en esta distribución.The identifier for the node that this distribution is on.

ComentariosRemarks

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.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.

Cuando se señala a un trabajador que espera en un evento, el trabajador se coloca al principio de la cola de ejecutables.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 permite que suceda esto 1.000 veces en una fila; después, el trabajador se coloca al final de la cola. allows for this to happen one thousand times in a row, after which the worker is placed at the end of the queue. Mover un trabajador al final de la cola tiene algunas implicaciones sobre el rendimiento.Moving a worker to the end of the queue has some performance implications.

PermissionsPermissions

En SQL ServerSQL Server, requiere VIEW SERVER STATE permiso.On SQL ServerSQL Server, requires VIEW SERVER STATE permission.
En Base de datos SQLSQL Database niveles de Premium, requieren la VIEW DATABASE STATE permiso en la base de datos.On Base de datos SQLSQL Database Premium Tiers, requires the VIEW DATABASE STATE permission in the database. En Base de datos SQLSQL Database niveles estándar y básico, requiere la administrador del servidor o un Administrador de Azure Active Directory cuenta.On Base de datos SQLSQL Database Standard and Basic Tiers, requires the Server admin or an Azure Active Directory admin account.

EjemplosExamples

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

El conjunto de resultados es el siguiente.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  

En la salida, si w_runnable y w_suspended son iguales, indica el tiempo que el trabajador está en el estado SUSPENDED.In the output, when w_runnable and w_suspended are equal, this represents the time that the worker is in the SUSPENDED state. De lo contrario, w_runnable representa el tiempo que ha pasado el trabajador en el estado RUNNABLE.Otherwise, w_runnable represents the time that is spent by the worker in the RUNNABLE state. En la salida, la sesión 52 está en estado SUSPENDED durante 35,094 milisegundos.In the output, session 52 is SUSPENDED for 35,094 milliseconds.

Vea tambiénSee Also

Sistema operativo SQL Server relacionadas con vistas de administración dinámica ( Transact-SQL )SQL Server Operating System Related Dynamic Management Views (Transact-SQL)