MSSQLSERVER_1205
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL verwaltete Instanz
Details
attribute | Wert |
---|---|
Produktname | SQL Server |
Ereignis-ID | 1205 |
Ereignisquelle | MSSQLSERVER |
Komponente | SQLEngine |
Symbolischer Name | LK_VICTIM |
Meldungstext | Die Transaktion (Prozess-ID %d) befand sich auf %.*ls Ressourcen aufgrund eines anderen Prozesses in einer Deadlocksituation und wurde als Deadlockopfer ausgewählt. Führen Sie die Transaktion erneut aus. |
Erklärung
Auf Ressourcen wird für separate Transaktionen in einer Reihenfolge zugegriffen, die zu einem Konflikt führt und einen Deadlock verursacht. Zum Beispiel:
- Transaction1 aktualisiert Table1.Row1 und Transaction2 aktualisiert Table2.Row2.
- Transaction1 versucht, Table2.Row2 zu aktualisieren, ist jedoch blockiert, da Transaction2 noch kein Commit ausgeführt hat und seine Sperren nicht freigegeben hat.
- Transaction2 versucht jetzt, Tabelle1.Zeile1 zu aktualisieren, ist jedoch blockiert, da Transaction1 kein Commit ausgeführt hat und seine Sperren nicht freigegeben hat.
- Es kommt zu einem Deadlock, weil von Transaction1 auf die Beendigung von Transaction2 gewartet wird, während gleichzeitig von Transaction2 auf die Beendigung von Transaction1 gewartet wird.
Das System erkennt diesen Deadlock und wählt eine der beteiligten Transaktionen als „Opfer“ aus. Anschließend wird diese Fehlermeldung ausgegeben, und für die Transaktion des Opfers wird ein Rollback durchgeführt. Ausführliche Informationen finden Sie unter Deadlocks.
Benutzeraktion
Deadlocks sind in den meisten Fällen anwendungsbezogene Probleme und erfordern Anwendungsentwickler, Codeänderungen vorzunehmen. Ein Ansatz, wenn Sie Fehler 1205 erhalten, besteht darin, die Abfragen erneut auszuführen. In diesem Blog finden Sie ein Beispiel dafür, wie Sie den Deadlock wiederholen und die Abfrage erneut ausführen: Deadlock Simulator-App für Entwickler: Behandeln eines SQL Deadlock-Problems in Ihrer App
Sie können auch die Anwendung überarbeiten, um Deadlocks zu vermeiden. Die Transaktion, die als Opfer ausgewählt wurde, kann erneut ausgeführt werden und wird wahrscheinlich erfolgreich verlaufen, je nachdem, welche Vorgänge gleichzeitig ausgeführt werden.
Wenn Sie Deadlocks verhindern oder vermeiden möchten, sollten alle Transaktionszugriffszeilen in derselben Reihenfolge (Table1 und dann Table2) vorliegen. Auf diese Weise kann es zwar zum Blockieren kommen, ein Deadlock tritt jedoch nicht auf.
Weitere Informationen finden Sie unter Behandeln von Deadlocks und Minimieren von Deadlocks.