Surveille les sessions bloquées d'une instance SQL sur Linux. Remarque : Ce moniteur est désactivé par défaut. Utilisez des remplacements pour l'activer en cas de besoin.
Le moniteur Sessions de blocage détecte une situation 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.
Quand le verrouillage et le blocage prennent une ampleur telle que les performances du système sont considérablement affectées, la raison en est généralement 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 :
Requêtes annulées qui ne sont pas restaurées
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 :
Transactions longues
Absence d'index appropriés
Utilisation inappropriée des indicateurs de verrouillage
Autres problèmes liés à une conception d'application médiocre
Terminer la session à la tête de la chaîne des blocages
Raccourcir les durées des transactions
Créer des index appropriés
Utiliser des indicateurs de verrouillage. Consultez la documentation en ligne de SQL Server
Utiliser des niveaux d'isolement basés sur les versions des lignes
Configurer les paramètres SQL Server (paramètres de mémoire, dépassements de délai d'attente de verrou, etc.)
Changer les seuils sur le moniteur pour cette base de données spécifique ou pour toutes les bases de données
Sinon, si les sessions bloquées ne représentent pas un critère important pour la base de données :
Désactiver le moniteur pour cette base de données spécifique ou pour toutes les bases de données
Nom | Description | Valeur par défaut |
Priorité d'alerte | Définit la priorité de l'alerte. | Élevée |
Gravité d'alerte | Définit la gravité de l'alerte. | Erreur (error) |
Activé | Active ou désactive le flux de travail. | Oui |
Génère des alertes | Définit si le flux de travail génère une alerte. | Oui |
Intervalle (en secondes) | Intervalle régulier (en secondes) auquel exécuter le flux de travail. | 300 |
Nombre de sessions bloquées | Nombre maximal autorisé de sessions bloquées. | 1 |
Heure de synchronisation | Heure de la synchronisation spécifiée selon un format de 24 heures. Peut être omise. |
|
Délai d'expiration (secondes) | Spécifie la durée pendant laquelle le flux de travail est autorisé à s'exécuter avant d'être fermé et marqué comme ayant échoué. | 200 |
Délai d’attente pour la connexion de base de données (secondes) | Le workflow échoue et enregistre un événement s’il ne peut pas accéder à la base de données pendant la période spécifiée. | 15 |
Délai d'attente (minutes) | Durée d'exécution minimale du processus avant sa prise en compte pour une analyse des SPID bloqués. | 1 |
Target | Microsoft.SQLServer.Linux.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.Linux.MonitorType.DBEngine.BlockingSessions | ||
Remotable | True | ||
Accessibility | Public | ||
Alert Message |
| ||
RunAs | Default |
<UnitMonitor ID="Microsoft.SQLServer.Linux.Monitor.DBEngine.BlockingSessions" Accessibility="Public" Enabled="false" Target="SqlDiscL!Microsoft.SQLServer.Linux.DBEngine" ParentMonitorID="Health!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.Linux.MonitorType.DBEngine.BlockingSessions" ConfirmDelivery="false">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.Linux.Monitor.DBEngine.BlockingSessions.AlertMessage">
<AlertOnState>Error</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>High</AlertPriority>
<AlertSeverity>Error</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/MachineName$</AlertParameter1>
<AlertParameter2>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/InstanceName$</AlertParameter2>
<AlertParameter3>$Data/Context/Property[@Name='BlockedSPIDList']$</AlertParameter3>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="Blocked" MonitorTypeStateID="Blocked" HealthState="Error"/>
<OperationalState ID="NotBlocked" MonitorTypeStateID="NotBlocked" HealthState="Success"/>
</OperationalStates>
<Configuration>
<MachineName>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/MachineName$</MachineName>
<NetbiosComputerName>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/NetbiosComputerName$</NetbiosComputerName>
<InstanceName>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/InstanceName$</InstanceName>
<ConnectionString>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/ConnectionString$</ConnectionString>
<InstanceVersion>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/Version$</InstanceVersion>
<InstanceEdition>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/Edition$</InstanceEdition>
<IntervalSeconds>300</IntervalSeconds>
<SyncTime/>
<WaitMinutes>1</WaitMinutes>
<NumberBlockedSPIDs>1</NumberBlockedSPIDs>
<TimeoutSeconds>200</TimeoutSeconds>
<SqlExecTimeoutSeconds>60</SqlExecTimeoutSeconds>
<SqlTimeoutSeconds>15</SqlTimeoutSeconds>
</Configuration>
</UnitMonitor>