Skip to content

SQL Server Process Status

1. Detailed MetricsSQL Server

UID: sql_server_process_statusVersión: 1.3.1 Paneles: ~12

Propósito

Este dashboard monitoriza la actividad de procesos de SQL Server, mostrando:

  • Sesiones en ejecución
  • Procesos bloqueados y cadenas de bloqueo
  • Queries de larga duración
  • Uso de TempDB
  • Deadlocks detectados

Ayuda a identificar cuellos de botella de rendimiento, cadenas de bloqueo y problemas de concurrencia que afectan la estabilidad de la base de datos.

Variables

VariableDescripción
$Server_NameServidor SQL Server a monitorizar
$DateFullFecha y hora específica para análisis puntual

Código de Colores

ColorCódigoSignificado
Verde#00db88Running - Procesos ejecutándose normalmente
Amarillo#fade2aSuspended - Procesos suspendidos
Magenta#ad21d8e8Blocked - Procesos bloqueados
Rojo#F2495CCritical - Estado crítico

Paneles

Process Status Timeline

Process Status timeseries

Cronología del estado de los procesos en ejecución. Solo se muestran procesos con estado Running, Suspended y Blocked.

Estados de proceso:

EstadoColorDescripción
RunningVerdeProceso ejecutándose activamente
SuspendedAmarilloProceso esperando recurso
BlockedMagentaProceso bloqueado por otro

Importancia: El estado de los procesos es fundamental para entender la salud operacional del servidor. Un número elevado de procesos en estado Suspended indica esperas por recursos (I/O, memoria, CPU), mientras que procesos Blocked señalan problemas de concurrencia que pueden degradar significativamente el rendimiento y la experiencia del usuario. Monitorear esta métrica permite detectar problemas antes de que escalen a incidentes críticos.


TempDB Size

TempDB Size timeseries

Cronología del uso de TempDB, separado por tipo de objeto.

Componentes de TempDB:

ComponenteColorDescripción
Total Space MBVerdeEspacio total de TempDB
Version Store MBMagentaEspacio para versionado de filas
Internal Objects MBNaranjaObjetos internos (sorts, hashes)
User Objects MBCyanTablas temporales de usuario

Importancia: TempDB es una base de datos crítica compartida por todas las conexiones del servidor. Su agotamiento puede detener completamente las operaciones del servidor, afectando todas las bases de datos. El Version Store crece con transacciones largas cuando se usa Read Committed Snapshot Isolation (RCSI) o Snapshot Isolation. Los Internal Objects reflejan operaciones de ordenamiento y hash que pueden indicar queries ineficientes. Monitorear TempDB previene interrupciones de servicio catastróficas.

TempDB Usage

Un Version Store grande puede indicar transacciones largas con RCSI o Snapshot Isolation activo. Internal Objects elevado sugiere queries con operaciones de ordenamiento/agrupación pesadas.

Estrategias para gestionar TempDB

  1. Configurar múltiples archivos de datos - Usar un archivo por núcleo de CPU (hasta 8) para reducir contención de páginas de asignación
  2. Pre-dimensionar los archivos - Evitar auto-crecimiento durante operaciones críticas
  3. Habilitar Trace Flag 1118 - Reduce contención de SGAM (en versiones anteriores a SQL Server 2016)
  4. Monitorear Version Store - Identificar y terminar transacciones huérfanas
  5. Ubicar TempDB en almacenamiento rápido - SSD o NVMe dedicado si es posible

Process Status Summary

Process Status Summary stat

Resumen del estado de procesos para la fecha seleccionada.

Métricas:

  • Running: Procesos ejecutándose
  • Suspended: Procesos suspendidos
  • Blocked: Procesos bloqueados
  • Deadlock: Deadlocks detectados

Importancia: Este resumen proporciona una vista rápida del estado de concurrencia del servidor. Los contadores de Blocked y Deadlock son indicadores críticos de problemas de diseño de aplicaciones o queries. Valores persistentes diferentes de cero requieren investigación inmediata ya que impactan directamente la productividad de los usuarios y pueden indicar problemas sistémicos en el diseño de la base de datos o las aplicaciones.

Umbrales:

MétricaValorColor
Blocked1-9Magenta
Blocked>= 10Rojo
Deadlock1-2Magenta
Deadlock>= 3Rojo

Long Running Queries

Long Queries table

Queries de larga duración que pueden afectar el rendimiento.

Columnas:

  • Process ID
  • Query Text
  • Duration
  • Database
  • Application
  • Login
  • Hostname

Importancia: Las queries de larga duración son frecuentemente la causa raíz de bloqueos, consumo excesivo de recursos y degradación del rendimiento general. Mantienen bloqueos por períodos prolongados, consumen memoria y CPU, pueden llenar TempDB, y bloquean otras operaciones. Identificarlas permite optimizar proactivamente y prevenir incidentes.

Long Running Queries

Queries que corren por mucho tiempo pueden:

  • Bloquear otros procesos
  • Consumir recursos excesivos
  • Indicar falta de índices
  • Causar crecimiento de TempDB

Cómo abordar queries de larga duración

  1. Capturar el plan de ejecución - Usar SET STATISTICS IO/TIME ON o Query Store
  2. Identificar operaciones costosas - Buscar Table Scans, Key Lookups y Sorts
  3. Revisar índices faltantes - El plan de ejecución sugiere índices útiles
  4. Evaluar la lógica de negocio - Determinar si la query puede dividirse o ejecutarse en horarios de baja demanda
  5. Considerar Resource Governor - Limitar recursos para queries de reportes

Blocking Details

Blocking Details table

Detalle de la cadena de bloqueos activa.

Información mostrada:

  • Proceso bloqueado
  • Proceso bloqueador
  • Query del proceso bloqueado
  • Query del proceso bloqueador
  • Tiempo de espera
  • Tipo de espera

Importancia: Comprender la cadena de bloqueos es esencial para resolver problemas de concurrencia. Esta información permite identificar el proceso cabeza de la cadena (head blocker) que está causando el efecto cascada. Sin esta visibilidad, los administradores podrían terminar procesos incorrectos o no abordar la causa raíz. El tiempo de espera indica la severidad del impacto en los usuarios afectados.

Pasos para resolver una cadena de bloqueos

  1. Identificar el head blocker - Es el proceso que no está siendo bloqueado por nadie pero bloquea a otros
  2. Analizar la query del bloqueador - Determinar si puede optimizarse o si está esperando input del usuario
  3. Evaluar si puede terminarse - Considerar el impacto de hacer KILL del proceso
  4. Contactar al propietario de la aplicación - Si es una aplicación específica, coordinar con el equipo responsable
  5. Documentar el incidente - Registrar para análisis posterior y prevención

Deadlock Information

Deadlock Info table

Información detallada de deadlocks detectados.

Información incluida:

  • Deadlock ID
  • Process ID
  • Blocked By
  • Query
  • Application
  • Login
  • Database
  • Wait Time
  • Wait Type

Importancia: Los deadlocks representan fallos completos de transacciones donde SQL Server debe sacrificar una de ellas (la víctima). Aunque SQL Server los resuelve automáticamente, cada deadlock significa una transacción fallida, posible pérdida de datos o trabajo del usuario, y degradación de la experiencia. Los deadlocks recurrentes indican problemas de diseño que deben corregirse en el código de la aplicación.

Deadlocks

Los deadlocks ocurren cuando dos o más procesos se bloquean mutuamente esperando recursos que el otro tiene. SQL Server automáticamente termina uno de los procesos (víctima). Requieren análisis para prevenir recurrencia.

Estrategia para eliminar deadlocks recurrentes

  1. Habilitar Trace Flag 1222 - Captura información detallada del deadlock en el error log
  2. Analizar el grafo de deadlock - Identificar los recursos y el orden de acceso
  3. Establecer orden consistente de acceso - Todas las transacciones deben acceder a las tablas en el mismo orden
  4. Reducir duración de transacciones - Transacciones más cortas = menor probabilidad de conflicto
  5. Usar el nivel de aislamiento apropiado - Considerar READ COMMITTED SNAPSHOT
  6. Agregar índices de cobertura - Reducir la cantidad de bloqueos necesarios

Guía de Interpretación

Análisis de Bloqueos

EscenarioInterpretaciónAcción
Blocked > 0Existe bloqueo activoIdentificar bloqueador
Blocked alto y sostenidoProblema de concurrenciaRevisar queries y transacciones
Picos de BlockedOperaciones específicasAnalizar patrones de carga

Análisis de TempDB

Componente AltoPosible CausaAcción
Version StoreTransacciones largas con RCSIReducir duración de transacciones
Internal ObjectsQueries con sorts/hashesAgregar índices, optimizar queries
User ObjectsMuchas tablas temporalesRevisar uso de #temp tables

Mejores Prácticas para Evitar Bloqueos

Diseño de Base de Datos

  • Normalizar apropiadamente - Evitar redundancia que cause actualizaciones múltiples
  • Usar claves primarias estrechas - Índices clustered pequeños reducen bloqueos
  • Diseñar índices estratégicamente - Índices de cobertura evitan lookups y reducen bloqueos
  • Particionar tablas grandes - Permite operaciones paralelas sin conflictos

Desarrollo de Aplicaciones

  • Transacciones cortas - Hacer el trabajo mínimo necesario dentro de la transacción
  • Acceso ordenado a objetos - Todas las transacciones deben acceder a las tablas en el mismo orden alfabético o lógico
  • Evitar interacción de usuario en transacciones - Nunca esperar input del usuario con transacción abierta
  • Usar nivel de aislamiento apropiado - READ COMMITTED SNAPSHOT elimina bloqueos de lectura
  • Implementar reintentos - Las aplicaciones deben manejar deadlocks con lógica de reintento

Operaciones y Mantenimiento

  • Programar operaciones pesadas fuera de horario pico - Reindexación, estadísticas, backups
  • Monitorear bloqueos proactivamente - Alertar cuando Blocked > umbral por más de N segundos
  • Mantener estadísticas actualizadas - Planes de ejecución óptimos reducen duración de queries
  • Revisar queries problemáticas regularmente - Usar Query Store para identificar regresiones

Stored Procedures Utilizados

ProcedimientoDescripción
[ProcessStatus].[spProcessStatus_Runnable_new]Procesos en estado Running
[ProcessStatus].[spProcessStatus_Suspended_new]Procesos en estado Suspended
[ProcessStatus].[spProcessStatus_Blocked_new]Procesos en estado Blocked
[ProcessStatus].[spProcessStatus_Blocking_new]Procesos que están bloqueando
[ProcessStatus].spTempDBSizeTamaño y uso de TempDB
[ProcessStatus].spLongQuerysQueries de larga duración
[ProcessStatus].[spDeadlock]Información de deadlocks

Vistas Utilizadas

VistaDescripción
ProcessStatus.vwProcessStatus_newEstado actual de procesos

Troubleshooting

Bloqueos Frecuentes

  1. Identificar el query bloqueador
  2. Revisar si hay índices faltantes
  3. Evaluar nivel de aislamiento (considerar RCSI)
  4. Optimizar transacciones para que sean más cortas

TempDB Lleno

  1. Identificar queries con Internal Objects altos
  2. Revisar uso de tablas temporales
  3. Verificar transacciones largas con Version Store
  4. Considerar agregar archivos a TempDB

Deadlocks Recurrentes

  1. Analizar el XML del deadlock
  2. Identificar recursos en conflicto
  3. Establecer orden consistente de acceso a tablas
  4. Considerar hints de bloqueo si es necesario

Referencias de Microsoft

Bloqueos y Concurrencia

Deadlocks

TempDB

Niveles de Aislamiento