Transaction (Process ID) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
Ich erhalte diesen Fehler zufällig, wenn eine meiner Websites ausgelastet ist. Ich weiß ungefähr, auf welchen Tabellengruppen es sich befindet, aber nach meiner Erfahrung mit anderen Programmen erhalte ich normalerweise die SQL zurück, wenn der Deadlock auftritt. Gibt es eine Flagge, die ich einschalten sollte, damit dies geschehen kann?
Ich werde versuchen, den Deadlock selbst als separates Problem zu debuggen, da dies meine Hauptfrage ist.
Ich verwende SQL Server 2008 Standard Edition.
sql-server-2008
deadlock
webnoob
quelle
quelle
;-T1204
für das Ablaufverfolgungsflag hinzu, um den Dienst zu beenden und neu zu starten.-1
Parameter, derDBCC TRACEON
global bezeichnet.Antworten:
Die von Ihnen benötigten Daten werden im erweiterten Standardereignis-Trace aufgezeichnet.
Es ist jedoch nicht mehr vorhanden, wenn Sie den Dienst neu gestartet haben, z. B. um ein Ablaufverfolgungsflag anzuwenden, oder wenn der Puffer zwischenzeitlich gewechselt ist.
Sie können eine eigene Ablaufverfolgung für erweiterte Ereignisse einrichten, in der das Deadlock-Diagramm in einem Dateiziel für einen dauerhaften nichtflüchtigen Speicher gespeichert wird. Beispielcode hier . Ich persönlich finde das Deadlock-Diagramm XML freundlicher als die Ausgabe des Trace-Flags.
Bearbeiten
CAST(REPLACE(REPLACE(XEventData.XEvent.value('(data/value)[1]', 'varchar(max)'), '<victim-list>', '<deadlock><victim-list>'), '<process-list>', '</victim-list><process-list>') AS XML) AS DeadlockGraph
in derSELECT
Liste verwenden .quelle
Die akzeptierte Antwort hat bei mir nicht durchgehend funktioniert. Es ist anscheinend bekannt, dass der Ringpuffer Ereignisse unter bestimmten Umständen löscht.
ConnectItem
Probleme mit dem Ringpuffer
Die Ereignisdateien des system_health-Protokolls können analysiert werden (anhand dieser Antwort ):
Das XdlFile-Feld kann in einer .xdl-Datei gespeichert und in SSMS eingelesen werden. Getestet in SQL Server 2012.
quelle