Deadlock vs Lockwait-Timeout auf MySQL
Kann mir jemand erklären, mich auf details, die den Unterschied von Deadlock und Lockwait Fehler auf MySQL 5.1. Ist es nur das gleiche? Wann wird deadlock-Fehler auftreten und Wann hat die lockwait-timeout auftreten?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen deadlock Auftritt, wo eine zirkuläre Abhängigkeit besteht zwischen den sperren, Transaktionen erwerben müssen, um fortfahren zu können: zum Beispiel vorstellen, dass Transaktion 1 lock hält Einen aber muss die Sperre B zu gehen; und Transaktion 2 hält die Sperre B, muss aber Sperre Ein zu gehen—die Transaktionen sind sofort blockiert (kein timeout erforderlich) und kann weder gehen, bis man seine sperren frei. So ist die einzige Lösung für eine Transaktion ein Rollback ausgeführt werden (der code der Anwendung erkennt diesen Fall und handle auch entsprechend, in der Regel durch den Versuch, die Transaktion erneut).
Einen warten timeout tritt auf, wenn das konfigurierte timeout-Zeit (z.B.
innodb_lock_wait_timeout
im Fall von InnoDB-sperren) verstreicht, während eine Transaktion wartet auf eine Sperre, vielleicht, weil einer langsamen Abfrage ist die Sperre und wurde nicht fertig ausgeführt. Es ist möglich (sogar wahrscheinlich), dass die Sperre verfügbar sind und erworben wurden, wenn die Transaktion bereits länger gewartet, aber der timeout existiert, um zu vermeiden, Anwendungen warten auf die Datenbank für unbestimmte Zeit.
Deadlock zwei threads unendlich warten auf die gleiche Sache. Lock wait timeout bedeutet, dass ein thread Timeout beim warten auf eine Sperre und verhindert somit eine Sackgasse.