Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 2617|Antwort: 2

[Tipps] SQL Server verwendet erweiterte Ereignisse, um Deadlock-Probleme zu verfolgen

[Link kopieren]
Veröffentlicht am 02.03.2024 19:13:04 | | | |
Anforderungen: Es gibt viele Gründe, warum SQL-Server-Datenbanken Deadlocks verursachen; in der Produktion kann jeder auf Deadlock-Probleme stoßen, und die spezifische Ursache wird möglicherweise nicht allein durch die abnormalen Informationen von Anwendungs-Deadlocks bestimmt, daher ist es notwendig, Erweiterungsereignisse in SQL Server zu verwenden, um Deadlock-Probleme zu verfolgen und die genauen Details zu dokumentieren, wann Deadlocks auftreten.

Erweiterte Veranstaltungsübersicht

Extended Events ist eine leichte Performance-Monitoring-Funktion, die es Nutzern ermöglicht, die Daten zu sammeln, die sie benötigen, um Probleme zu überwachen und zu lösen. Diese Funktion ermöglicht es Ihnen, Details zu den internen Abläufen der Daten-Engine zur Leistungsüberwachung und Problemlösung einzusehen.

Mit der Extended Events (XEvents)-Architektur können Nutzer so viel oder so wenig Daten verwenden, wie sie benötigen, um die Leistung von SQL Server, Azure SQL Database und Azure SQL Managed Instance zu überwachen, zu identifizieren oder zu beheben. Extended Events sind hoch konfigurierbar, leicht und gut skalierbar.

Referenz:
Der Hyperlink-Login ist sichtbar.
Der Hyperlink-Login ist sichtbar.


Ursachen von Pattsituationen

Deadlocks entstehen durch konkurrierende Nebenläufigkeitssperren in einer Datenbank, meist bei mehrstufigen Transaktionen. Jede Benutzersitzung kann eine oder mehrere Aufgaben in ihrem Namen ausführen, wobei jede Aufgabe verschiedene Ressourcen abrufen oder warten kann. Die folgenden Arten von Ressourcen können Blockade verursachen und schließlich zu einer Deadlock führen.

  • Sperren: Sperren, die darauf warten, Ressourcen wie Objekte, Seiten, Zeilen, Metadaten und Anwendungen abzurufen, können zu Deadlocks führen. Zum Beispiel hat die Transaktion T1 ein gemeinsames Schloss (S-Schloss) auf Zeile r1 und wartet darauf, ein exklusives Schloss (X-Schloss) für Zeile r2 zu erhalten. Transaktion T2 hat ein gemeinsames Schloss (S-Schloss) in Reihe r2 und wartet darauf, ein exklusives Schloss (X-Schloss) für Zeile r1 zu erhalten. Dies führt zu einer Lock-Loop, in der sowohl T1 als auch T2 darauf warten, dass der andere die gesperrte Ressource freigibt.
  • Worker-Threads: Aufgaben, die für verfügbare Worker-Threads in Warteschlangen gehen, können zu Deadlocks führen. Wenn eine Warteschlange-Aufgabe eine Ressource hat, die alle Worker-Threads blockiert, führt das zu einem Deadlock. Zum Beispiel geht Sitzung S1 nach Beginn einer Transaktion und dem Erwerb eines gemeinsamen Schlosses (S-Lock) für Zeile r1 in den Ruhemodus. Eine aktive Sitzung, die auf allen verfügbaren Worker-Threads läuft, versucht, eine exklusive Sperre (X-Lock) für Zeile r1 zu erhalten. Da Sitzung S1 keinen Worker-Thread abrufen kann, kann sie die Transaktion nicht committen und die Sperre auf Zeile R1 aufheben. Das führt zu einer Pattsituation.
  • Speicher: Ein Deadlock kann auftreten, wenn eine gleichzeitige Anfrage darauf wartet, Speicher zu gewinnen, und der derzeit verfügbare Speicher nicht für seine Bedürfnisse ausreicht. Zum Beispiel werden zwei gleichzeitige Abfragen (Q1 und Q2) als benutzerdefinierte Funktionen ausgeführt und erhalten jeweils 10 MB bzw. 20 MB Speicher. Wenn jede Abfrage 30 MB benötigt und der gesamte verfügbare Speicher 20 MB beträgt, müssen Q1 und Q2 aufeinander warten, um Speicher freizumachen, was zu einem Deadlock führt.
  • Parallele Abfrage- und ausführungsbezogene Ressourcen: Verarbeitungskoordinatoren, Generatoren oder Consumer-Threads, die typischerweise mit geschalteten Ports assoziiert sind, können sich gegenseitig blockieren, wenn sie mindestens einen Prozess enthalten, der nicht Teil einer parallelen Abfrage ist, was zu Deadlocks führt. Außerdem bestimmt SQL Server bei Beginn der Ausführung einer parallelen Abfrage den Grad der Parallelität oder die Anzahl der Worker-Threads basierend auf der aktuellen Arbeitsbelastung. Ein Deadlock kann auftreten, wenn eine unerwartete Änderung der Systemarbeitslast auftritt, zum Beispiel wenn eine neue Abfrage im Server läuft oder wenn das System keine Worker-Threads mehr hat.
  • Multiple Activity Outcome Set (MARS)-Ressourcen: Diese Ressourcen werden verwendet, um die Cross-Ausführung mehrerer Aktivitätsanfragen unter MARS zu steuern.


Referenz:
Der Hyperlink-Login ist sichtbar.

Deadlock-erweitertes Ereignislogging

Erstellen Sie ein Erweiterungsereignis, um die Deadlock-Informationen mit folgendem Befehl festzuhalten:


Starte eine Deadlock-Ereignissitzung

Stoppen Sie eine Veranstaltungssitzung

Eine Ereignissitzung löschen

Abfrage von Ereignissitzungsdaten


Test-Deadlocks

Erstelle eine neue Tab1-Tabelle zum Testen, erstelle zwei neue Ausführungsfenster und führe jeweils folgende Befehle aus:

Ein Deadlock tritt wie folgt auf:

Eine Transaktion (Prozess-ID 68) mit einem anderen Prozess ist auf einer gesperrten Ressource blockiert und als Deadlock-Opfer ausgewählt. Bitte führen Sie die Transaktion erneut durch.
Die Transaktion (Prozess-ID 68) war bei den Sperrressourcen mit einem anderen Prozess blockiert und wurde als Opfer der Blockade ausgewählt. Wiederholen Sie die Transaktion.


Sehen Sie sich die Daten der Veranstaltungssitzungen wie in der folgenden Abbildung dargestellt an:



Die detaillierten XML-Daten sind wie folgt:


(Ende)





Vorhergehend:.NET/C# Leistungsoptimierung mittels PLINQ-Parallelabfrage
Nächster:Codeausführung in Visual Studio über das C# Interactive-Fenster
 Vermieter| Veröffentlicht am 02.03.2024 19:14:35 |
Erweitern Sie den Standardpfad der Ereignisdatei:

C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Log\deadlock_monitor_0_133538477770860000.xel
 Vermieter| Veröffentlicht am 02.03.2024 19:16:54 |
Erstelle eine neue Tab1-Tabelle, um das SQL-Skript zu testen

Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com