Estados del sp_Who2 – RUNNABLE – SUSPENDED – RUNNING

Es normal que al monitorear un motor lo primero que hagamos es ejecutar un sp_Who2, donde al ver el campo status nos encontramos con, por ejemplo, RUNNABLE – SUSPENDED – RUNNING.

¿Cual es la diferencia?

Esta información proviene de los SQL Schedulers, que nos indican distintos puntos de ejecución del SPId.

Los Schedulers están compuestos por tres partes que ciclan continuamente.

1) Procesador

2) Waiter list – Hilos esperando por recursos. Que pueden ser identificados desde la Sys.dm_os_waiting_tasks.

3) Runnable – Hilos que poseen todos los recursos asignados y se encuentran esperando al procesador. Que pueden ser identificados en las DMVs sys.dm_os_schedulers y sys.dm_exec_requests

Esto nos determina los estados RUNNABLE – SUSPENDED – RUNNING

1) RUNNING – El hilo se esta ejecutando en el servidor.

2) SUSPENDED – El hilo esta esperando recursos.

3) RUNNABLE – El hilo esta esperando ser ejecutado por el procesador.

¿Por que cambia el estado de RUNNING a SUSPENDED? En el caso de que un hilo este ejecutándose y se no le alcancen los recursos asignados se mueve nuevamente a SUSPENDED a fin de esperar una nueva asignación.

¿Por que al cambia de SUSPENDED a RUNNABLE? Los recursos se encuentran nuevamente disponibles y es puesto en al final de la cola de ejecución.

Basado en la nota de sqlserver-dba.com