Freigeben über


Behandeln von Deadlocks

Wenn eine Instanz von Microsoft SQL Server Database Engine (Datenbankmodul) eine Transaktion als Deadlockopfer auswählt, beendet sie den aktuellen Batch, führt ein Rollback der Transaktion durch und gibt die Fehlermeldung 1205 an die Anwendung zurück.

Your transaction (process ID #52) was deadlocked on {lock | communication buffer | thread} resources with another process and has been chosen as the deadlock victim. Rerun your transaction.

Da alle Anwendungen, die Transact-SQL-Abfragen absenden, als Deadlockopfer ausgewählt werden können, sollten die Anwendungen über einen Fehlerhandler verfügen, der die Fehlermeldung 1205 abfangen kann. Wenn der Fehler nicht von der Anwendung abgefangen wird, kann sie fortfahren, ohne zu erkennen, dass für die Transaktion ein Rollback ausgeführt wurde, und Fehler können auftreten.

Durch Implementieren eines Fehlerhandlers, der die Fehlermeldung 1205 abfängt, kann eine Anwendung den Deadlock verarbeiten und Abhilfemaßnahmen ergreifen, wie etwa die Abfrage, die am Deadlock beteiligt war, automatisch erneut abzusenden. Durch die automatische erneute Absendung der Abfrage ist es nicht notwendig, dass der Benutzer von dem Deadlock erfährt.

Die Anwendung sollte kurzzeitig angehalten werden, bevor die Abfrage erneut abgesendet wird. Auf diese Weise kann die andere Transaktion, die an einem Deadlock beteiligt ist, abgeschlossen werden und die Sperren freigeben, die einen Anteil am Deadlockzyklus hatten. Die Wahrscheinlichkeit, dass ein Deadlock erneut auftritt, wenn die erneut abgesendete Abfrage ihre Sperren anfordert, wird so verringert.