sys.dm_os_schedulers
Actualizado: 14 de abril de 2006
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 columna
Tipo de datos
Descripción
scheduler_address
varbinary(8)
Dirección de memoria del programador. No acepta valores NULL.
parent_node_id
int
Id. 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
Id. del programador. Todos los programadores que se utilizan para ejecutar consultas normales tienen números de Id. menores de 255. SQL Server utiliza internamente los programadores que tienen Id. mayores o iguales de 255, como el programador de conexión de administrador dedicado. No acepta valores NULL.
cpu_id
smallint
Id. de CPU a la que está asociado este programador. Si SQL Server está configurado para ejecutarse con afinidad, el valor es el Id. de la CPU en donde se supone que se ejecuta el programador.
255 = No se especifica una máscara de afinidad.
No acepta valores NULL.
status
nvarchar(60)
Indica el estado del programador. Puede ser uno de los siguientes valores:
- HIDDEN ONLINE
- HIDDEN OFFLINE
- VISIBLE ONLINE
- VISIBLE OFFLINE
- VISIBLE ONLINE (DAC)
No acepta valores NULL.
Los programadores HIDDEN se utilizan para procesar solicitudes internas de Database Engine (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.
is_online
bit
Si SQL Server está configurado para utilizar sólo 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 es el caso, esta columna devuelve 0. Este valor significa que el programador no se utiliza para procesar consultas o procesos por 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 modificadores contextuales 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 modificar el contexto.
Nota:
Si un trabajador genera el programador, se incluye a sí mismo en la cola de ejecutables y no encuentra otros trabajadores, se seleccionará a sí mismo. En este caso, context_switches_count no se actualiza, sino que se actualiza yield_count.
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:
- Tareas que esperan a que un trabajador las ejecute.
- Tareas actualmente en espera o en ejecución (en estado SUSPENDED o RUNNABLE).
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 siempre es no 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 modificador 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. En SQL Server 2000, una tarea se enruta a un programador determinado. No obstante, en SQL Server 2005, la decisión de enrutado se realiza basándose en la carga en el programador. SQL Server 2005 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 pulsos 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.
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.
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;
Éste es el conjunto de resultados.
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 Id. < 255. Los programadores con Id. >= 255 se conocen como 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 la memoria utilizan los programadores257
y258
, 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 CPU1
y el nodo NUMA1
se asigna a la CPU0
. Generalmente, SQL Server se inicia en un nodo NUMA distinto del nodo 0. Para obtener más información, vea Descripción del acceso no uniforme a memoria. - Si
runnable_tasks_count
devuelve0
, indica que no existen tareas activas en ejecución. Sin embargo, pueden existir sesiones activas. - El programador
255
que representa la conexión DAC incluye3
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 conexión 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.
Ésta 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;
Éste es el conjunto de resultados.
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
Vistas de administración dinámica relacionadas con el sistema operativo SQL Server
Otros recursos
Configuración de superficie para características (DAC del motor de base de datos)
Arquitectura de la memoria
Ayuda e información
Obtener ayuda sobre SQL Server 2005
Historial de cambios
Versión | Historial |
---|---|
14 de abril de 2006 |
|