Überwacht blockierte Sitzungen für eine SQL-Instanz.
Der Monitor für das Blockieren von Sitzungen erkennt, ob eine Blockierungssituation besteht.
Eine Blockierung tritt auf, wenn eine Sitzung eine bestimmte Ressource sperrt und eine zweite Sitzung versucht, für dieselbe Ressource einen in Konflikt stehenden Sperrtyp anzufordern. Die Blockierung ist ein unvermeidbares Merkmal von relationalen Datenbank-Managementsystemen (RDBMS) mit sperrbasierter Parallelität. Zu viele Blockierungen können jedoch zu Leistungsproblemen führen.
Wenn die Anzahl der Sperr- und Blockierungsvorgänge so stark zunimmt, dass die Systemleistung erheblich beeinträchtigt wird, ist dies normalerweise auf eine der folgenden Ursachen zurückzuführen:
Eine Sitzung sperrt eine Reihe von Ressourcen und gibt sie nie frei. Dies wird normalerweise verursacht durch:
Abgebrochene Abfragen, für die kein Rollback durchgeführt wird
Verwaiste Transaktionen
Eine (durch eine session_id oder SPID identifizierte) Sitzung sperrt eine Reihe von Ressourcen für einen längeren Zeitraum, bevor die Sperren freigegeben werden. Dies wird normalerweise verursacht durch:
Lang andauernde Transaktionen
Fehlen geeigneter Indizes
Nicht ordnungsgemäße Verwendung von Sperrhinweisen
Andere Probleme in Bezug auf unzureichenden Anwendungsentwurf
Beenden der Sitzung zu Beginn der Blockierungskette
Verkürzen der Transaktionszeiten
Erstellen geeigneter Indizes
Verwenden von Sperrhinweisen Siehe SQL Server-Onlinedokumentation
Verwenden von auf der Zeilenversionsverwaltung basierenden Isolationsstufen
Konfigurieren von SQL Server-Einstellungen (Speichereinstellungen, Sperrtimeouts usw.)
Ändern der Schwellenwerte des Monitors für diese Datenbank oder für alle Datenbanken
Wenn blockierte Sitzungen für die Datenbank nicht relevant sind, haben Sie zudem folgende Möglichkeiten:
Deaktivieren des Monitors für diese Datenbank oder für alle Datenbanken
Siehe auch: " INF: Verstehen und Lösen von Blockierproblemen in SQL Server"
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>