Ich habe die folgende Abfrage (alle Tabellen sind InnoDB)wie man vermeiden Deadlock in mysql
INSERT INTO busy_machines(machine)
SELECT machine FROM all_machines
WHERE machine NOT IN (SELECT machine FROM busy_machines)
and machine_name!='Main'
LIMIT 1
, die eine Sackgasse führt, wenn ich es in Threads ausgeführt, offensichtlich wegen der inneren wählen, nicht wahr?
Der Fehler, den ich bekommen ist:
(1213, 'Deadlock found when trying to get lock; try restarting transaction')
Wie kann ich den Stillstand vermeiden? Gibt es eine Möglichkeit, die Abfrage zu ändern, damit sie funktioniert, oder muss ich etwas anderes tun?
Der Fehler passiert nicht immer, natürlich, nur nach dem Ausführen dieser Abfrage viele Male und in mehreren Threads.
Sind Sie erleben Deadlock oder Sperr-Konflikt? – Quassnoi
@Quassnoi: Ich habe die Info zu der Frage hinzugefügt - (1213, "Deadlock gefunden, wenn Sie versuchen, Sperre zu bekommen; versuchen, Transaktion neu zu starten") – olamundo
'show innodb status' würde kurz die Ursache der letzten Deadlock beschreiben – jonny