Obwohl wir alle wissen, dass das Sperren für die Datenintegrität unerlässlich ist, ändert es nichts an der Tatsache, dass es Ihnen ein ernsthafter Dorn im Auge sein kann!
Wenn wir Blockierungen in unserer Datenbank sehen, gehen wir oft davon aus, dass etwas nicht stimmt – das ist nicht immer der Fall. Meiner Erfahrung nach ist die Mehrheit der SQL Server-Blockierung legitim, aber sie muss untersucht und verstanden werden. Deadlocks hingegen sind selten legitim! Deadlocks gelten in der SQL Server-Welt als kritisch, da Prozesse automatisch beendet werden, da SQL Server Deadlocks ohne manuelles Eingreifen auflöst. Auch wenn sie „gelöst“ sind, müssen sie definitiv untersucht und verstanden werden.
Es gibt einige Entwurfsstrategien, die dazu beitragen können, das Auftreten von SQL Server-Blockierungen und Deadlocks in Ihrer Datenbank zu reduzieren:
- Verwenden Sie geclusterte Indizes für Tabellen mit hoher Auslastung
- Vermeiden Sie SQL-Anweisungen mit hoher Zeilenanzahl
- Lange Transaktionen in viele kürzere Transaktionen aufteilen
- Stellen Sie sicher, dass UPDATE- und DELETE-Anweisungen Indizes verwenden
- Stapelaktualisierungsjobs nicht so planen, dass sie sich überschneiden
- Halten Sie Ihre Statistiken auf dem neuesten Stand
Und ich bin mir sicher, dass es noch viele mehr gibt, aber die Realität ist, dass Sie alle erdenklichen Best Practices befolgen können und trotzdem Blockaden und Deadlocks haben. Dies liegt daran, dass Deadlocks in den meisten Fällen durch schlecht entworfenen Anwendungscode verursacht werden. (Das Kaninchenloch des Anwendungsdesigns:Codierung, Transaktionsisolierung und Zugriffsmuster. Aber jetzt konzentrieren wir uns auf die Untersuchung und das Verständnis von Blockierungen und Deadlocks).
SQL Server-Blockierung und Deadlocks
Die erste Herausforderung bei Blockierungen und Deadlocks besteht darin, festzustellen, wann und wo sie auftreten, da sie normalerweise nicht gemeldet, nachträglich gemeldet oder automatisch behoben werden. Um wirklich zu verstehen, was in Ihrer Datenbank in Bezug auf Blockierungen und Deadlocks passiert, müssen Sie deren Vorkommen im Laufe der Zeit sehen. Um das Problem zu beheben und künftige Vorkommnisse zu verhindern, müssen Sie außerdem an die Ursache der Blockierung herangehen – sich mit Informationen bewaffnen, die Sie an die Anwendungsentwickler weitergeben müssen, und so dem Schuldzuweisungsspiel zwischen den Entwicklern ein Ende setzen und Datenbankadministratoren.
Aus diesem Grund gefällt mir der Workload Analyzer sehr gut in der Spotlight-Cloud. Ich kann einen Zeitraum auswählen – eine Stunde, einen Tag oder einen benutzerdefinierten Zeitraum – und die Sperre anzeigen -bezogene Aktivität für diesen Bereich. Sofort verstehe ich besser, was los ist! Ich kann Sperrmuster sehen, die Sperrrate im Laufe der Zeit mit einem früheren Zeitraum vergleichen, die Sperrrate über einen bestimmten Zeitraum sehen und Sperr-KPIs wie Lock Exclusive, Shared und Update anzeigen.
Jetzt möchte ich also zur eigentlichen Ursache vordringen – dort befindet sich Dimensionsbaum kommt. Ich kann die Informationen für einen bestimmten Zeitrahmen aufschlüsseln und filtern, sodass ich dieselben Informationen in tieferen Dimensionen wie Datenbanken sehen kann , Benutzer , Programme und SQL-Anweisungen , während ich das „weiße Rauschen“ herausfiltere, während ich gehe – um die Quelle(n) meines Problems eindeutig zu identifizieren.
Hier schaue ich mir an, welche Datenbanken erfahren im folgenden Zeitraum die meisten Sperren:
Jetzt werde ich die Benutzer aufschlüsseln innerhalb der ausgewählten Datenbank:
Dann entscheide ich mich, die Liste der SQL-Anweisungen anzuzeigen wodurch eine Sperre verursacht wird, die vom ausgewählten Benutzer ausgeführt wurde in der ausgewählten Datenbank für den angegebenen Zeitbereich .
Jetzt kann ich alle Sperren sehen verwandte Informationen für die ausgewählte SQL-Anweisung .
Wenn Sie also Ihren Sperr-, Blockierungs- und Deadlock-Problemen auf den Grund gehen wollen, empfehle ich Ihnen, sich Spotlight Cloud anzusehen. Mit Spotlight Cloud ist es einfacher denn je, Sperrprobleme innerhalb der Datenbank zu untersuchen und zu verstehen und letztendlich sicherzustellen, dass Ihr Anwendungscode Deadlock-frei ist.