InnoDB
erkennt automatisch einen Deadlock von
Transaktionen und rollt eine oder mehrere Transaktion(en)
zurück, um den Deadlock aufzulösen. InnoDB
versucht, für den Rollback kleine Transaktionen herauszusuchen,
wobei die Größe einer Transaktion anhand der Anzahl der Zeilen
bestimmt wird, die sie einfügt, ändert oder löscht.
InnoDB
weiß von Tabellensperren, wenn
innodb_table_locks=1
(die
Standardeinstellung) und AUTOCOMMIT=0
eingestellt ist, und die MySQL-Ebene oberhalb von
InnoDB
weiß ebenso von den Zeilensperren.
Sonst kann die automatische Deadlock-Erkennung von
InnoDB
keine Deadlocks erkennen, wenn eine
von der MySQL-Anweisung LOCK TABLES
gesetzte
Tabellensperre oder eine von einer anderen Speicher-Engine als
InnoDB
gesetzte Sperre beteiligt ist. Solche
Situationen müssen Sie durch Einstellen der Systemvariablen
innodb_lock_wait_timeout
beherrschen.
Wenn InnoDB
eine Transaktion vollständig
zurückrollt, werden alle von ihr gehaltenen Sperren
freigegeben. Wird jedoch nur eine einzige SQL-Anweisung infolge
eines Fehlers zurückgerollt, bleiben manche von ihr errichteten
Sperren eventuell erhalten, da InnoDB
Zeilensperren in einem Format speichert, an dem es später nicht
mehr erkennen kann, welche Anweisung welche Sperren gesetzt hat.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.