En una publicación de blog anterior, discutimos cómo verificar la presión de la CPU en SQL Server utilizando el DMV wait_stats. Sin embargo, para obtener una imagen completa de la presión de la CPU, necesitamos utilizar otro DMV llamado sys.dm_os_schedulers.
¿Por qué necesitamos la ayuda de sys.dm_os_schedulers? El DMV wait_stats captura el tiempo de espera para un grupo de tipos de espera. Rastrea el tiempo de espera de recursos experimentado por un proceso y lo refleja en el DMV. Sin embargo, hay escenarios en los que un proceso no experimenta ninguna espera de recursos y solo tiene una espera de CPU o de señal. En tales casos, el tiempo de espera no se captura en el DMV wait_stats y no refleja la presión de la CPU experimentada en absoluto.
Aquí es donde entra en juego sys.dm_os_schedulers. Al utilizar este DMV, podemos detectar la presión de la CPU incluso cuando no hay espera de recursos. La siguiente consulta se puede utilizar para recuperar información de sys.dm_os_schedulers:
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;Esta consulta simple devuelve una fila por CPU y proporciona información importante como el número de tareas en espera en la cola ejecutable (runnable_tasks_count). Si el valor de runnable_tasks_count no es cero, indica presión de la CPU y requiere un monitoreo cercano.
Es importante tener en cuenta que sys.dm_os_schedulers no mantiene datos históricos desde el último reinicio, a diferencia del DMV wait_stats. Por lo tanto, es necesario consultar más frecuentemente, tal vez cada 5 minutos, si es necesario.
En resumen, monitorear la CPU en SQL Server implica tres partes:
- Verificar directamente la CPU utilizando el DMV sys.os_ring_buffers
- Verificar el DMV wait_stats
- Verificar sys.dm_os_schedulers
Al utilizar estos tres métodos, puede monitorear y gestionar eficazmente la presión de la CPU en su entorno de SQL Server.