sys.dm_os_schedulers (Transact-SQL)
Devuelve una fila por programador en SQL Server donde cada programador está asignado a un determinado procesador. Use esta vista para supervisar la condición de un programador o identificar tareas descontroladas.
Nombre de la columna |
Tipo de datos |
Descripción |
---|---|---|
scheduler_address |
varbinary(8) |
Dirección de memoria del programador. No acepta valores NULL. |
parent_node_id |
int |
Identificador del nodo al que pertenece el programador, también denominado nodo primario. Representa un nodo de acceso de memoria no uniforme (NUMA). No acepta valores NULL. |
scheduler_id |
int |
Identificador del programador. Todos los programadores que se utilizan para ejecutar las consultas normales tienen números de identificación inferiores a 1048576. SQL Server utiliza internamente todos los programadores con identificadores mayores o iguales que 1048576, como el programador de conexión de administrador dedicada. No acepta valores NULL. |
cpu_id |
smallint |
Identificador de CPU asignado al programador. No acepta valores NULL.
|
status |
nvarchar(60) |
Indica el estado del programador. Puede ser uno de los siguientes valores:
No acepta valores NULL. Los programadores HIDDEN se utilizan para procesar solicitudes internas de Motor de base de datos. Los programadores VISIBLE se utilizan para procesar solicitudes de usuario. Los programadores OFFLINE se asignan a procesadores sin conexión en la máscara de afinidad y, por tanto, no se utilizan para procesar solicitudes. Los programadores ONLINE se asignan a procesadores con conexión en la máscara de afinidad y están disponibles para procesar subprocesos. DAC indica que el programador se está ejecutando con una conexión de administrador dedicada. HOT ADDED indica los programadores que se agregaron en respuesta a un evento de CPU instalada en cliente. |
is_online |
bit |
Si SQL Server está configurado para utilizar solo algunos de los procesadores disponibles en el servidor, esta configuración puede significar que algunos programadores están asignados a procesadores que no están en la máscara de afinidad. Si así fuera, esta columna devuelve 0. Este valor indica que el programador no se utiliza para procesar consultas o lotes. No acepta valores NULL. |
is_idle |
bit |
1 = El programador está inactivo. No se está ejecutando ningún trabajador. No acepta valores NULL. |
preemptive_switches_count |
int |
Número de veces que los trabajadores de este programador han cambiado al modo preferente. Para ejecutar código situado fuera de SQL Server (por ejemplo, en procedimientos almacenados extendidos y consultas distribuidas), se tiene que ejecutar un subproceso fuera del control del programador no preferente. Para hacerlo, un trabajador se cambia al modo preferente. |
context_switches_count |
int |
Número de cambios de contexto que se han producido en este programador. No acepta valores NULL. Para permitir que se ejecuten otros trabajadores, el trabajador en ejecución actual tiene que renunciar al control del programador o el cambio de contexto.
|
idle_switches_count |
int |
Número de veces que el programador ha esperado por un evento mientras estaba inactivo. Esta columna es similar a context_switches_count. No acepta valores NULL. |
current_tasks_count |
int |
Número de tareas actuales que están asociadas con este programador. Este recuento incluye lo siguiente:
Cuando una tarea se completa, este contador disminuye. No acepta valores NULL. |
runnable_tasks_count |
int |
Número de trabajadores, con tareas asignadas, que están esperando a ser programados en la cola de ejecutables. No acepta valores NULL. |
current_workers_count |
int |
Número de trabajadores que están asociados a este programador. Este recuento incluye a los trabajadores que no están asignados a ninguna tarea. No acepta valores NULL. |
active_workers_count |
int |
Número de trabajadores activos. Un trabajador activo nunca es preferente, debe tener una tarea asociada, y está ejecutándose, es ejecutable o está suspendido. No acepta valores NULL. |
work_queue_count |
bigint |
Número de tareas en la cola de tareas pendientes. Estas tareas esperan a que un trabajador las ejecute. No acepta valores NULL. |
pending_disk_io_count |
int |
Número de E/S pendientes que esperan a completarse. Cada programador tiene una lista de E/S pendientes que se comprueban para determinar si se han completado cada vez que hay un cambio de contexto. El recuento aumenta cuando se inserta la solicitud. Este recuento disminuye cuando la solicitud se completa. Este número no indica el estado de las operaciones de E/S. No acepta valores NULL. |
load_factor |
int |
Valor interno que indica la carga detectada en este programador. Este valor se utiliza para determinar si una nueva tarea debe colocarse es este programador o en otro. Este valor es útil para tareas de depuración cuando parece que los programadores no están cargados equitativamente. La decisión de enrutamiento se toma en función de la carga del programador. SQL Server también utiliza un factor de carga de nodos y programadores para ayudar a determinar la mejor ubicación para adquirir recursos. Cuando una tarea se pone en cola, el factor de carga aumenta. Cuando una tarea se completa, el factor de carga disminuye. El uso de los factores de carga ayuda a que el SO de SQL Server equilibre mejor la carga de trabajo. No acepta valores NULL. |
yield_count |
int |
Valor interno que se utiliza para indicar el progreso en este programador. El monitor de programadores utiliza este valor para determinar si un trabajador del programador no está generando otros trabajadores a tiempo. Este valor no indica que el trabajador o la tarea se transfirieron a un nuevo trabajador. No acepta valores NULL. |
last_timer_activity |
bigint |
En tics de CPU, la última vez que el programador comprobó la cola del temporizador del programador. No acepta valores NULL. |
failed_to_create_worker |
bit |
Se establece en 1 si no se pudo crear un trabajador en este programador. Generalmente se produce debido a restricciones de memoria. Acepta valores NULL. |
active_worker_address |
varbinary(8) |
Dirección de memoria del trabajador que está activo actualmente. Acepta valores NULL. Para obtener más información, vea sys.dm_os_workers (Transact-SQL). |
memory_object_address |
varbinary(8) |
Dirección de memoria del objeto de memoria del programador. No acepta valores NULL. |
task_memory_object_address |
varbinary(8) |
Dirección de memoria del objeto de memoria de la tarea. No acepta valores NULL. Para obtener más información, vea sys.dm_os_memory_objects (Transact-SQL). |
quantum_length_us |
bigint |
Solamente se identifica con fines informativos. No compatible. La compatibilidad con versiones posteriores no está garantizada. Expone el cuanto del programador que utiliza SQLOS. |
Permisos
Requiere el permiso VIEW SERVER STATE en el servidor.
Ejemplos
A.Supervisar programadores ocultos y no ocultos
En la siguiente consulta se muestra el estado de los trabajadores y las tareas en todos los programadores de SQL Server. Esta consulta se ejecutó en un sistema que incluye lo siguiente:
Dos procesadores (CPU)
Dos nodos (NUMA)
Una CPU por nodo NUMA
Máscara de afinidad establecida en 0x03.
SELECT
scheduler_id,
cpu_id,
parent_node_id,
current_tasks_count,
runnable_tasks_count,
current_workers_count,
active_workers_count,
work_queue_count
FROM sys.dm_os_schedulers;
El conjunto de resultados es el siguiente.
scheduler_id cpu_id parent_node_id current_tasks_count
------------ ------ -------------- -------------------
0 1 0 9
257 255 0 1
1 0 1 10
258 255 1 1
255 255 32 2
runnable_tasks_count current_workers_count
-------------------- ---------------------
0 11
0 1
0 18
0 1
0 3
active_workers_count work_queue_count
-------------------- --------------------
6 0
1 0
8 0
1 0
1 0
La salida proporciona la siguiente información:
Existen cinco programadores. Dos programadores tienen un valor de identificador < 1048576. Los programadores con un identificador >= 1048576 se denominan programadores ocultos. El programador 255 representa la conexión de administrador dedicada (DAC). Existe un programador DAC por sesión. Los monitores de recursos que coordinan la presión de memoria utilizan los programadores 257 y 258, uno por nodo NUMA.
La salida muestra 23 tareas activas. Estas tareas incluyen solicitudes de usuario además de las tareas de administración de recursos iniciadas por SQL Server. Ejemplos de tareas de SQL Server son RESOURCE MONITOR (una por nodo NUMA), LAZY WRITER (una por nodo NUMA), LOCK MONITOR, CHECKPOINT y LOG WRITER.
El nodo NUMA 0 se asigna a la CPU 1 y el nodo NUMA 1 se asigna a la CPU 0. SQL Server se inicia normalmente en un nodo NUMA distinto del nodo 0.
Cuando runnable_tasks_count devuelve 0, no hay ninguna tarea activa en ejecución. Sin embargo, pueden existir sesiones activas.
El programador 255 que representa la conexión DAC incluye 3 trabajadores asociados. Estos trabajadores se asignan en el inicio de SQL Server y no cambian. Se utilizan únicamente para procesar consultas DAC. Las dos tareas de este programador representan un administrador de conexiones y un trabajador inactivo.
active_workers_count representa a todos los trabajadores con tareas asociadas que se ejecutan en modo no preferente. Algunas tareas, como las escuchas de red, se ejecutan con programas preferentes.
Los programadores ocultos no procesan solicitudes habituales de usuario. El programador DAC es la excepción. Este programador dispone de un subproceso para ejecutar solicitudes.
B.Supervisar programadores no ocultos en un sistema ocupado
En la consulta siguiente se muestra el estado de programadores no ocultos con mucha carga en los que existen más solicitudes de las que pueden controlar los trabajadores disponibles. En este ejemplo tienen asignadas tareas 256 trabajadores. Algunas tareas están esperando su asignación a un trabajador. El recuento bajo de ejecutables implica que varias tareas están esperando un recurso.
[!NOTA]
Puede conocer el estado de los trabajadores si consulta sys.dm_os_workers. Para obtener más información, vea sys.dm_os_workers (Transact-SQL).
Esta es la consulta:
SELECT
scheduler_id,
cpu_id,
current_tasks_count,
runnable_tasks_count,
current_workers_count,
active_workers_count,
work_queue_count
FROM sys.dm_os_schedulers
WHERE scheduler_id < 255;
El conjunto de resultados es el siguiente.
scheduler_id current_tasks_count runnable_tasks_count
------------ ------------------- --------------------
0 144 0
1 147 1
current_workers_count active_workers_count work_queue_count
--------------------- -------------------- --------------------
128 125 16
128 126 19
Por comparación, el resultado siguiente muestra varias tareas ejecutables donde ninguna tarea está esperando para obtener un trabajador. El valor de work_queue_count es 0 en ambos programadores.
scheduler_id current_tasks_count runnable_tasks_count
------------ ------------------- --------------------
0 107 98
1 110 100
current_workers_count active_workers_count work_queue_count
--------------------- -------------------- --------------------
128 104 0
128 108 0
Vea también
Referencia
Funciones y vistas de administración dinámica (Transact-SQL)
Vistas de administración dinámica relacionadas con el sistema operativo de SQL Server (Transact-SQL)