SQL Server Process Status
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
| Variable | Descripción |
|---|---|
$Server_Name | Servidor SQL Server a monitorizar |
$DateFull | Fecha y hora específica para análisis puntual |
Código de Colores
| Color | Código | Significado |
|---|---|---|
| Verde | #00db88 | Running - Procesos ejecutándose normalmente |
| Amarillo | #fade2a | Suspended - Procesos suspendidos |
| Magenta | #ad21d8e8 | Blocked - Procesos bloqueados |
| Rojo | #F2495C | Critical - 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:
| Estado | Color | Descripción |
|---|---|---|
| Running | Verde | Proceso ejecutándose activamente |
| Suspended | Amarillo | Proceso esperando recurso |
| Blocked | Magenta | Proceso 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:
| Componente | Color | Descripción |
|---|---|---|
| Total Space MB | Verde | Espacio total de TempDB |
| Version Store MB | Magenta | Espacio para versionado de filas |
| Internal Objects MB | Naranja | Objetos internos (sorts, hashes) |
| User Objects MB | Cyan | Tablas 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
- 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
- Pre-dimensionar los archivos - Evitar auto-crecimiento durante operaciones críticas
- Habilitar Trace Flag 1118 - Reduce contención de SGAM (en versiones anteriores a SQL Server 2016)
- Monitorear Version Store - Identificar y terminar transacciones huérfanas
- 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étrica | Valor | Color |
|---|---|---|
| Blocked | 1-9 | Magenta |
| Blocked | >= 10 | Rojo |
| Deadlock | 1-2 | Magenta |
| Deadlock | >= 3 | Rojo |
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
- Capturar el plan de ejecución - Usar SET STATISTICS IO/TIME ON o Query Store
- Identificar operaciones costosas - Buscar Table Scans, Key Lookups y Sorts
- Revisar índices faltantes - El plan de ejecución sugiere índices útiles
- Evaluar la lógica de negocio - Determinar si la query puede dividirse o ejecutarse en horarios de baja demanda
- 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
- Identificar el head blocker - Es el proceso que no está siendo bloqueado por nadie pero bloquea a otros
- Analizar la query del bloqueador - Determinar si puede optimizarse o si está esperando input del usuario
- Evaluar si puede terminarse - Considerar el impacto de hacer KILL del proceso
- Contactar al propietario de la aplicación - Si es una aplicación específica, coordinar con el equipo responsable
- 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
- Habilitar Trace Flag 1222 - Captura información detallada del deadlock en el error log
- Analizar el grafo de deadlock - Identificar los recursos y el orden de acceso
- Establecer orden consistente de acceso - Todas las transacciones deben acceder a las tablas en el mismo orden
- Reducir duración de transacciones - Transacciones más cortas = menor probabilidad de conflicto
- Usar el nivel de aislamiento apropiado - Considerar READ COMMITTED SNAPSHOT
- Agregar índices de cobertura - Reducir la cantidad de bloqueos necesarios
Guía de Interpretación
Análisis de Bloqueos
| Escenario | Interpretación | Acción |
|---|---|---|
| Blocked > 0 | Existe bloqueo activo | Identificar bloqueador |
| Blocked alto y sostenido | Problema de concurrencia | Revisar queries y transacciones |
| Picos de Blocked | Operaciones específicas | Analizar patrones de carga |
Análisis de TempDB
| Componente Alto | Posible Causa | Acción |
|---|---|---|
| Version Store | Transacciones largas con RCSI | Reducir duración de transacciones |
| Internal Objects | Queries con sorts/hashes | Agregar índices, optimizar queries |
| User Objects | Muchas tablas temporales | Revisar 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
| Procedimiento | Descripció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].spTempDBSize | Tamaño y uso de TempDB |
[ProcessStatus].spLongQuerys | Queries de larga duración |
[ProcessStatus].[spDeadlock] | Información de deadlocks |
Vistas Utilizadas
| Vista | Descripción |
|---|---|
ProcessStatus.vwProcessStatus_new | Estado actual de procesos |
Troubleshooting
Bloqueos Frecuentes
- Identificar el query bloqueador
- Revisar si hay índices faltantes
- Evaluar nivel de aislamiento (considerar RCSI)
- Optimizar transacciones para que sean más cortas
TempDB Lleno
- Identificar queries con Internal Objects altos
- Revisar uso de tablas temporales
- Verificar transacciones largas con Version Store
- Considerar agregar archivos a TempDB
Deadlocks Recurrentes
- Analizar el XML del deadlock
- Identificar recursos en conflicto
- Establecer orden consistente de acceso a tablas
- Considerar hints de bloqueo si es necesario
Referencias de Microsoft
Bloqueos y Concurrencia
- Guía de versiones de fila y bloqueo de transacciones - Guía completa sobre cómo SQL Server gestiona bloqueos y versionado de filas
- Comprender y resolver problemas de bloqueo - Diagnóstico y resolución de problemas de bloqueo
- sys.dm_tran_locks - Vista de administración dinámica para monitorear bloqueos activos
Deadlocks
- Analizar y prevenir deadlocks - Guía para entender, detectar y prevenir deadlocks
- Detectar y finalizar deadlocks - Procedimientos para resolver deadlocks
- Trace Flag 1222 - Habilitar información detallada de deadlocks en el error log
TempDB
- Optimizar el rendimiento de TempDB - Configuración y mejores prácticas para TempDB
- Monitorear el uso de TempDB - Cómo monitorear el espacio y uso de TempDB
- Contención de TempDB - Diagnosticar y resolver problemas de contención en TempDB
Niveles de Aislamiento
- Niveles de aislamiento de transacciones - Referencia de los diferentes niveles de aislamiento
- Read Committed Snapshot Isolation - Implementar RCSI para reducir bloqueos de lectura
- Snapshot Isolation - Usar aislamiento de instantánea para transacciones consistentes
