Analyse les sessions bloquées pour une instance SQL. Remarque : cette analyse est désactivée par défaut. Utilisez des remplacements afin de l’activer, le cas échéant.
L'analyse des sessions de blocage détecte les situations de blocage.
Un blocage se produit lorsqu'une session maintient un verrou sur une ressource spécifique et qu'une deuxième session tente d'acquérir sur la même ressource un type de verrou en conflit. Le blocage est une caractéristique inévitable de tout système de gestion de base de données relationnelle (SGBDR) avec concurrence basée sur les verrous. Un blocage trop important peut toutefois nuire aux performances.
Lorsque le verrouillage et le blocage prennent une ampleur telle que les performances système se dégradent, la raison en est généralement l’une des suivantes :
Une session maintient un verrou sur un ensemble de ressources et ne les libère jamais. Situation généralement provoquée par :
des requêtes annulées qui ne sont pas restaurées ;
des transactions orphelines.
Une session (identifiée par un session_id ou « SPID ») maintient un verrou sur un ensemble de ressources pendant une période prolongée avant de libérer ces ressources. Situation généralement provoquée par :
des transactions de longue durée ;
un manque d'index appropriés ;
une utilisation inappropriée d'indicateurs de blocage ;
d'autres problèmes ayant trait à la mauvaise conception d'une application.
Supprimez la session au début de la chaîne de blocage
Raccourcissez les durées des transactions
Créez des index appropriés
Utilisez des indicateurs de verrouillage. Consultez la documentation en ligne de SQL Server
Utiliser des niveaux d'isolation basés sur le contrôle de version de ligne
Configurer des paramètres SQL Server (mémoire, délais d'expiration de verrous, etc.)
modifiez les seuils de cette base de données précise ou de toutes les bases de données pour l'analyse ;
Sinon, si les sessions bloquées ne représentent pas un critère important pour la base de données :
désactivez l'analyse pour cette base de données spécifique ou de toutes les bases de données.
Voir aussi : « INF : comprendre et résoudre les problèmes de blocage de SQL Server »
Nom | Description | Valeur par défaut |
Activé |
| Non |
Génère des alertes |
| Oui |
Intervalle (en secondes) | L'intervalle de temps récurrent en secondes pendant lequel le workflow est exécuté. | 300 |
Nombre de sessions bloquées | Le nombre maximal autorisé de sessions bloquées. | 1 |
Heure de synchronisation | L'heure de synchronisation spécifiée dans un format de 24 heures. Peut être omise. |
|
Délai d'expiration (en secondes) | Spécifie la durée pendant laquelle le workflow est autorisé à être exécuté avant d'être fermé et marqué comme un échec. | 300 |
Temps d'attente (en minutes) | La durée minimale d'exécution de processus avant sa prise en compte pour une analyse des SPID bloqués. | 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>