sys.dm_os_workers (Transact-SQL)
Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics 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 | Solo 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 |
afinidad | bigint | La afinidad de subprocesos del trabajador. Compara la afinidad del subproceso en sys.dm_os_threads (Transact-SQL). |
estado | 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 | Solo para uso interno. |
max_quantum | bigint | Solo para uso interno. |
boost_count | int | Solo 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. |
Comentarios
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 VER ESTADO DE RENDIMIENTO DEL SERVIDOR 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;
Este es el conjunto de resultados.
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