sys.dm_os_schedulers (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 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. Para obtener más información sobre los programadores, consulte la Guía de arquitectura de subprocesos y tareas.
Nota:
Para llamarlo desde Azure Synapse Analytics o Analytics Platform System (PDW), use el nombre sys.dm_pdw_nodes_os_schedulers. El grupo de SQL sin servidor no admite esta sintaxis en Azure Synapse Analytics.
Nombre de la columna | Tipo de datos | Descripción |
---|---|---|
scheduler_address | varbinary(8) | Dirección de memoria del programador. No admite 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 admite 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 usa internamente los programadores que tienen identificadores mayores o iguales que 1048576, como el programador de conexiones de administrador dedicado. No admite valores NULL. |
cpu_id | smallint | Identificador de CPU asignado al programador. No admite valores NULL. Nota: 255 no indica ninguna afinidad como hizo en SQL Server 2005 (9.x). Consulte sys.dm_os_threads (Transact-SQL) para obtener información de afinidad adicional. |
status | nvarchar(60) | Indica el estado del programador. Puede ser uno de los siguientes valores: - OCULTO EN LÍNEA - OCULTO SIN CONEXIÓN - VISIBLE ONLINE - VISIBLE SIN CONEXIÓN - VISIBLE ONLINE (DAC) - HOT_ADDED No admite valores NULL. Los programadores HIDDEN se usan para procesar las solicitudes que son internas de la 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 usar solo algunos de los procesadores disponibles en el servidor, esta configuración puede significar que algunos programadores se asignan a los 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 admite valores NULL. |
is_idle | bit | 1 = El programador está inactivo. No se está ejecutando ningún trabajador. No admite 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 admite 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. Nota: Si un trabajador produce el programador y se coloca en la cola ejecutable y, a continuación, no encuentra ningún otro trabajo, el trabajador 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 admite 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 los ejecute. - Tareas que están actualmente en espera o en ejecución (en estado SUSPENDED o RUNNABLE). Cuando una tarea se completa, este contador disminuye. No admite 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 admite 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 admite 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 admite 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 admite 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 admite 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 usa 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 equilibrar mejor la carga de trabajo del sistema operativo de SQL Server. No admite 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 admite valores NULL. |
last_timer_activity | bigint | En tics de CPU, la última vez que el programador comprobó la cola del temporizador del programador. No admite 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, consulte sys.dm_os_workers (Transact-SQL). |
memory_object_address | varbinary(8) | Dirección de memoria del objeto de memoria del programador. No ADMITE VALORES NULL. |
task_memory_object_address | varbinary(8) | Dirección de memoria del objeto de memoria de la tarea. No admite valores NULL. Para 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 quantum del programador usado por SQLOS. |
total_cpu_usage_ms | bigint | Se aplica a: SQL Server 2016 (13.x) y versiones posteriores Cpu total consumida por este programador según lo notificado por los trabajadores no preferentes. No admite valores NULL. |
total_cpu_idle_capped_ms | bigint | Solamente se identifica con fines informativos. No compatible. La compatibilidad con versiones posteriores no está garantizada. Indica la limitación basada en el objetivo de nivel de servicio, siempre será 0 para las versiones que no son de Azure de SQL Server. Acepta valores NULL. |
total_scheduler_delay_ms | bigint | Se aplica a: SQL Server 2016 (13.x) y versiones posteriores El tiempo entre un trabajador que cambia y otro. Puede deberse a que los trabajos preventivos retrasan la programación del siguiente trabajo no preferente o debido a los subprocesos de programación del sistema operativo de otros procesos. No admite valores NULL. |
ideal_workers_limit | int | Se aplica a: SQL Server 2019 (15.x) y versiones posteriores El número de trabajadores debe estar idealmente en el programador. Si los trabajadores actuales superan el límite debido a la carga de tareas desequilibrado, una vez que se vuelvan inactivos, se recortarán. No admite valores NULL. |
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. |
Permisos
En SQL Server y SQL Managed Instance, requiere el permiso VIEW SERVER STATE
.
En los objetivos de servicio Básico, S0 y S1 de SQL Database y para bases de datos en grupos elásticos, se requiere la cuenta de administrador del servidor, la cuenta de administrador Microsoft Entra o la pertenencia al ##MS_ServerStateReader##
rol del servidor. En el resto de objetivos del servicio de SQL Database, se requiere el permiso VIEW DATABASE STATE
en la base de datos o la pertenencia en el rol del servidor ##MS_ServerStateReader##
.
Permisos para SQL Server 2022 y versiones posteriores
Requiere el permiso VER ESTADO DE RENDIMIENTO DEL SERVIDOR en el servidor.
Ejemplos
A Supervisar programadores ocultos y no ocultos
La consulta siguiente genera el estado de los trabajos y las tareas de SQL Server en todos los programadores. 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;
Este 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:
Hay cinco programadores. Dos programadores tienen un valor < de identificador 1048576. Los programadores con id >. = 1048576 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 memoria utilizan los programadores257
y258
, uno por nodo NUMA.La salida muestra 23 tareas activas. Estas tareas incluyen solicitudes de usuario además de tareas de administración de recursos iniciadas por SQL Server. Algunos ejemplos de tareas de SQL Server son RESOURCE MONITOR (uno por nodo NUMA), LAZY WRITER (uno 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
. SQL Server normalmente se inicia en un nodo NUMA distinto del nodo 0.Cuando
runnable_tasks_count
devuelve0
, no hay ninguna tarea activa en ejecución. Sin embargo, pueden existir sesiones activas.El programador
255
que representa la conexión DAC incluye3
trabajadores asociados. Estos trabajos se asignan al 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 todos los trabajos que tienen tareas asociadas y 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, consulte 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;
Este 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
Consulte también
Vistas de administración dinámica relacionadas con el sistema operativo de SQL Server (Transact-SQL)