So überwachen Sie Deadlocks

11

Wann und wie beginnen Sie mit der Fehlerbehebung bei SQL Server 2005/2008-Deadlocks? Die Warnung wird in SSMS über die SQL Server-Leistungsbedingungswarnung aktiviert, Objekte-> SQLServer: Sperren, Zähler-> Sperrenwarte / Sek., Instanz: _Gesamt, Warnung, wenn Zähler: über Wert 3 steigt. Ist dies eine proaktive Methode zur Überwachung? Was ist der akzeptable Wert? Ich würde mich sehr über Ihre Hilfe freuen. Vielen Dank!!!

db7
quelle

Antworten:

7

Sie können Ereignisbenachrichtigungen verwenden , um benachrichtigt zu werden, wenn auf dem Server ein Deadlock auftritt:

Sehen:

Zusätzliche Links:

Sankar Reddy
quelle
3

Das erste, was Sie tun müssen, ist, sich das Deadlock-Diagramm anzusehen und genau zu sehen, was los ist. Dann können Sie Ihre Optionen in Betracht ziehen, die normalerweise darauf hinauslaufen, a) die Anwendung so zu ändern, dass sie in einer Reihenfolge von Sperrobjekten standardisiert wird (z. B. wenn möglich, treffen Sie angesichts der Anwendungslogik eine Konvention mit Ihren Entwicklern, um Tabellen immer in alphabetischer Reihenfolge zu sperren) oder b ) Überprüfen Sie, ob Sie in jeder Transaktion wirklich auf der entsprechenden Isolationsstufe arbeiten .

Gaius
quelle
Laut stackoverflow.com/a/112256/14731 verhindert eine konsistente Sperrreihenfolge keine Deadlocks.
Gili
3

Ich würde mit der automatischen serverseitigen Verfolgung von 2 Hauptproblemen gehen:

  • lange Abfragen (Sie legen die Dauer fest, die für Ihre Umgebung lang ist)

  • Deadlocks - Deadlock-Diagramm und Lock: Deadlock-Kette überprüfen

Sie erhalten jeden Tag Ablaufverfolgungsdateien und können die Aktion überwachen, um festzustellen, ob ein geplantes Ereignis Probleme verursacht. Weitere Informationen zum Profilieren der Produktion finden Sie in dieser Frage: Verwenden von SQL Profiler in einer Datenbank, die sich in der Produktion befindet .

Marian
quelle
1

System Center Operations Manager (SCOM) mit dem SQL Server Management Pack kann bei Deadlocks benachrichtigen, wenn Sie die Protokollierung für Nachricht 1205 aktivieren. Sie können sie mit der folgenden SQL-Abfrage aktivieren : EXEC sp_altermessage 1205, 'WITH_LOG', 'true'.

Siehe auch meine Antwort auf "Warum werden der Objektname und der Indexname nicht im Deadlock-Diagramm ausgefüllt?" Für ein PowerShell-Skript, das ich geschrieben habe, werden Deadlock-Informationen aus dem Ereignispuffer abgerufen und die Deadlock-Diagramme als xdl-Dateien geschrieben, die in SQL Management Studio 2012 oder höher geöffnet oder im Editor angezeigt werden können, um weitere Details anzuzeigen.

JamieSee
quelle