Wie ist es möglich, Deadlocks ohne Transaktionen zu haben?

9

Mein Code ist ein wenig durcheinander, ich bin mir nicht sicher, wo das Problem liegt, aber ich bekomme Deadlocks, ohne Transaktionen oder Tabellensperren zu verwenden. Jede Information darüber würde helfen.

Ich habe nach Deadlocks gesucht und es scheint, dass die einzige Möglichkeit, sie zu verursachen, darin besteht, Transaktionen zu verwenden.

%Vor%

Bearbeiten: Warum downvotes? Es ist eine gültige Frage. Wenn es unmöglich ist, sag einfach warum, so dass andere Leute sehen können, wenn sie auf dieses Problem stoßen.

    
Stephen Bugs Kamenar 09.07.2013, 15:21
quelle

1 Antwort

1

In InnoDB wird jede Anweisung in einer Transaktion ausgeführt; BEGIN und autocommit = 0 werden für Transaktionen mit mehreren Kontoauszügen verwendet. Allerdings passiert der Deadlock zwischen verschiedenen Transaktionen.

Es scheint, dass Sie keinen Index für das Feld id haben oder mehr als ein Datensatz die gleiche id haben. Wenn nicht, dann haben Sie eine Index-Lücken-Verriegelung. Um weiter zu diagnostizieren, müssen Sie die Ausgabe von SHOW ENGINE InnoDB STATUS

bereitstellen     
Maxim Krizhanovsky 14.07.2013 16:32
quelle