Die Ursache für einen MySQL-Deadlock: Zwei oder mehr Prozesse konkurrieren während der Ausführung um Ressourcen. In MySQL gibt es drei Arten von Sperren: Sperren auf Tabellenebene, Sperren auf Zeilenebene und Seitensperren. Unter diesen haben Sperren auf Tabellenebene einen geringen Overhead, schnelle Sperren und es treten keine Deadlocks auf.
MySQL ist ein relationales Datenbankverwaltungssystem, das die SQL-Sprache verwendet, die am häufigsten verwendete standardisierte Sprache für den Zugriff auf Datenbanken. Bei der Nutzung von MySQL kann es zu Deadlocks kommen.
Die drei Arten von Sperren in MySQL:
Sperren auf Tabellenebene: geringer Overhead, schnelle Sperren; keine Deadlocks; Wahrscheinlichkeit von Sperrkonflikten geringste Parallelität.
Sperren auf Zeilenebene: Es kann zu hohem Overhead und langsamen Sperren kommen. Die Sperrgranularität ist am geringsten und die Parallelität ist am höchsten.
Seitensperre: Die Kosten und die Sperrzeit liegen zwischen Tabellensperren und Zeilensperren. Die Sperrgranularität liegt zwischen Tabellensperren und Zeilensperren und die Parallelität ist durchschnittlich.
Algorithmus:
Nächste Tastensperre sperren, gleichzeitig den Datensatz (Daten) sperren und die Lücke vor dem Datensatz sperren
Lückensperre, den Datensatz nicht sperren, nur die vorherige Lücke aufzeichnen
Recordlock (Daten sperren, nicht Lücke sperren)
Also eigentlich Next-KeyLocks=Lückensperre + Recordlock-Sperre
Unter welchen Umständen tritt ein Deadlock auf
Der sogenannte Deadlock
Sperren auf Tabellenebene verursachen keine Deadlocks. Daher gilt die Lösung für Deadlocks hauptsächlich für die am häufigsten verwendete InnoDB.
Der Schlüssel zu Deadlocks ist: zwei (oder mehr). Die Reihenfolge der Sitzungssperren ist inkonsistent.
Dann liegt der Schlüssel zur Lösung des Deadlock-Problems darin, verschiedene Sitzungen der Reihe nach zu sperren.
Das obige ist der detaillierte Inhalt vonWas verursacht einen MySQL-Deadlock?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!