1. Was ist ein MySQL Deadlock?
Ein MySQL Deadlock entsteht, wenn zwei oder mehr Transaktionen jeweils eine Ressource halten und gleichzeitig auf eine Ressource warten, die die andere Transaktion hält. Das ergibt einen zyklischen Wartegraph, aus dem keine Transaktion selbstständig herauskommt. InnoDB erkennt diesen Zyklus typischerweise innerhalb von Millisekunden, wählt eine Opfer-Transaktion (die mit dem geringsten Rollback-Aufwand) und rollt diese zurück — die andere kann dann weitermachen.
Das klassische Szenario mit zwei Transaktionen: Transaktion A sperrt Zeile 1 und wartet auf Zeile 2. Transaktion B hat Zeile 2 gesperrt und wartet auf Zeile 1. Beide warten aufeinander — zyklischer Deadlock. InnoDB wählt Transaktion B als Opfer, rollt sie zurück, Transaktion A kann weitermachen. Der Aufrufer von Transaktion B erhält den Fehler ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction.
Deadlocks sind kein Zeichen eines kaputten Systems — sie sind ein normales