Supervisa las sesiones bloqueadas de una instancia de SQL. Nota: este monitor está deshabilitado de manera predeterminada. Use las invalidaciones para habilitarla cuando sea necesario.
El monitor de bloqueo de sesiones detecta si existe una situación de bloqueo.
El bloqueo se produce cuando una sesión mantiene bloqueado un recurso específico y una segunda sesión intenta adquirir un tipo de bloqueo en conflicto en el mismo recurso. El bloqueo es una característica inevitable de cualquier sistema de administración de bases de datos relacionales (RDBMS) con simultaneidad basada en bloqueo. No obstante, un bloqueo excesivo puede provocar problemas de rendimiento.
Cuando los bloqueos aumentan hasta el extremo de que hay una repercusión importante en el rendimiento del sistema, normalmente se debe a uno de los siguientes motivos:
Una sesión mantiene bloqueado un conjunto de recursos y nunca los libera. Normalmente se debe a:
Consultas canceladas que no se revierten
Transacciones huérfanas
Una sesión (identificada mediante session_id o “SPID”) mantiene bloqueado un conjunto de recursos durante un periodo de tiempo prolongado antes de liberarlos. Normalmente se debe a:
Transacciones de ejecución prolongada
Falta de índices adecuados
Uso inadecuado de las sugerencias de bloqueo
Otros problemas relacionados con el diseño deficiente de la aplicación
Elimine la sesión al principio de la cadena de bloqueo.
Reduzca los tiempos de las transacciones.
Cree índices adecuados.
Use sugerencias de bloqueo. Vea los Libros en pantalla de SQL Server.
Use niveles de aislamiento basado en las versiones de las filas.
Configure las opciones de SQL Server (configuración de memoria, tiempos de espera de bloqueo, etc.).
Cambie los umbrales en el monitor para esta base de datos específica o para todas las bases de datos.
Por otro lado, si las sesiones bloqueadas no constituyen un problema para la base de datos:
Deshabilite el monitor para esta base de datos específica o para todas las bases de datos.
Vea también: “ INF: Descripción y resolución de problemas de bloqueo de SQL Server”
Nombre | Descripción | Valor predeterminado |
Habilitado |
| No |
Genera alertas |
| Sí |
Intervalo (segundos) | Intervalo de tiempo periódico en segundos en que se ejecuta el flujo de trabajo. | 300 |
Número de sesiones bloqueadas | Número máximo de sesiones bloqueadas permitido. | 1 |
Hora de sincronización | Hora de sincronización especificada en un formato de 24 horas. Se puede omitir. |
|
Tiempo de espera (segundos) | Especifica el tiempo durante el que se puede ejecutar el flujo de trabajo antes de que se cierre y se marque como error. | 300 |
Tiempo de espera (minutos) | Duración de ejecución de proceso mínima para considerarlo para el análisis de SPID bloqueados. | 1 |
Target | Microsoft.SQLServer.2014.DBEngine | ||
Parent Monitor | System.Health.PerformanceState | ||
Category | PerformanceHealth | ||
Enabled | False | ||
Alert Generate | True | ||
Alert Severity | Error | ||
Alert Priority | High | ||
Alert Auto Resolve | True | ||
Monitor Type | Microsoft.SQLServer.2014.DBEngine.BlockedSPIDs | ||
Remotable | True | ||
Accessibility | Public | ||
Alert Message |
| ||
RunAs | Default |
<UnitMonitor ID="Microsoft.SQLServer.2014.DBEngine.BlockedSPIDsMonitor" Accessibility="Public" Enabled="false" Target="SQL2014Core!Microsoft.SQLServer.2014.DBEngine" ParentMonitorID="SystemHealth!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2014.DBEngine.BlockedSPIDs" ConfirmDelivery="false">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2014.DBEngine.BlockedSPIDsMonitor.AlertMessage">
<AlertOnState>Error</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>High</AlertPriority>
<AlertSeverity>Error</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Data/Context/Property[@Name='BlockedSPIDList']$</AlertParameter1>
<AlertParameter2>$Target/Property[Type="SQL2014Core!Microsoft.SQLServer.2014.ServerRole"]/InstanceName$</AlertParameter2>
<AlertParameter3>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</AlertParameter3>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="Blocked" MonitorTypeStateID="Blocked" HealthState="Error"/>
<OperationalState ID="NotBlocked" MonitorTypeStateID="NotBlocked" HealthState="Success"/>
</OperationalStates>
<Configuration>
<ConnectionString>$Target/Property[Type="SQL2014Core!Microsoft.SQLServer.2014.DBEngine"]/ConnectionString$</ConnectionString>
<IntervalSeconds>300</IntervalSeconds>
<SyncTime/>
<WaitMinutes>1</WaitMinutes>
<NumberBlockedSPIDs>1</NumberBlockedSPIDs>
<TimeoutSeconds>300</TimeoutSeconds>
<InstanceName>$Target/Property[Type="SQL2014Core!Microsoft.SQLServer.2014.ServerRole"]/InstanceName$</InstanceName>
<ComputerName>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</ComputerName>
</Configuration>
</UnitMonitor>