Supervisa las sesiones bloqueadas de una instancia de SQL.
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 otra 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 el bloqueo y el desbloqueo 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 lo siguiente:
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 lo siguiente:
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
Eliminar la sesión al principio de la cadena de bloqueo
Reducir los tiempos de las transacciones
Cree los índices adecuados.
Use sugerencias de bloqueo. Vea los Libros en pantalla de SQL Server
Use niveles de aislamiento basados 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 de esta base de datos específica o de 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: Entender y resolver los problemas de bloqueo de SQL Server”.
Nombre | Descripción | Valor predeterminado |
Prioridad de alerta | Define la prioridad de la alerta. | Alto |
Gravedad de alerta | Define la gravedad de la alerta. | Error |
Habilitado | Habilita o deshabilita el flujo de trabajo. | No |
Genera alertas | Define si el flujo de trabajo genera una alerta. | 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 de sesiones bloqueadas. | 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 mínima de ejecución de proceso para considerarlo para el análisis de SPID bloqueados. | 1 |
Target | Microsoft.SQLServer.2008.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.2008.DBEngine.BlockedSPIDs | ||
Remotable | True | ||
Accessibility | Public | ||
Alert Message |
| ||
RunAs | Default |
<UnitMonitor ID="Microsoft.SQLServer.2008.DBEngine.BlockedSPIDsMonitor" Accessibility="Public" Enabled="false" Target="SQL2008Core!Microsoft.SQLServer.2008.DBEngine" ParentMonitorID="SystemHealth!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2008.DBEngine.BlockedSPIDs" ConfirmDelivery="false">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2008.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="SQL!Microsoft.SQLServer.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="SQL!Microsoft.SQLServer.DBEngine"]/ConnectionString$</ConnectionString>
<IntervalSeconds>300</IntervalSeconds>
<SyncTime/>
<WaitMinutes>1</WaitMinutes>
<NumberBlockedSPIDs>1</NumberBlockedSPIDs>
<TimeoutSeconds>300</TimeoutSeconds>
<InstanceName>$Target/Property[Type="SQL!Microsoft.SQLServer.ServerRole"]/InstanceName$</InstanceName>
<ComputerName>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</ComputerName>
</Configuration>
</UnitMonitor>