Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Warum Commit keinen Deadlock verursacht

Ich vermute, dass dies ein Grenzfall ist, der es nicht wert ist, effizienter zu werden. Beachten Sie, dass Sie 3 Sitzungen absolvieren mussten, um dieselbe Reihe zu erreichen – ein seltenes Ereignis. Und Sie haben einen ROLLBACK gemacht – ebenfalls selten. Der aufgetretene Deadlock ist also übertrieben, aber es lohnt sich nicht, ihn zu beheben. Aus diesem Grund muss man darauf vorbereitet sein, überall mit Deadlocks umzugehen.

FYI, wenn dies 3 Knoten eines Galera-Clusters wären, würden Fehler bei COMMIT auftreten die der Code verarbeiten müsste. Ich vermute, dass noch mehr Kombinationen seltsamer Dinge passieren, wenn Sie diese Transaktion (mit Rollback oder Commit) mehrmals auf mehrere Knoten anwenden.

Nun zu Ihrer Frage... Vermutlich ist der Deadlock nicht aufgetreten, weil einer der Threads die exklusive Sperre bekommen hat und der andere mit einem "wait" statt mit einem "deadlock" getroffen wurde.