Ausführliche Erläuterung der Mysql-Deadlock-Anzeige und Deadlock-Entfernung

Ausführliche Erläuterung der Mysql-Deadlock-Anzeige und Deadlock-Entfernung

Vorwort

Vor einiger Zeit ist bei mir ein MySQL-Deadlock-Problem aufgetreten und ich habe es behoben.

Problembeschreibung: MySQL-Änderungsanweisungen scheinen nicht wirksam zu sein und beim Verwenden des MySQL-GUI-Tools zum Bearbeiten des Werts eines Felds wird eine Ausnahme angezeigt.

Was ist ein Deadlock?

Bevor wir das MySQL-Deadlock-Problem lösen, wollen wir zunächst verstehen, was ein Deadlock ist.

Deadlock bezeichnet ein Phänomen, bei dem zwei oder mehr Prozesse während der Ausführung aufgrund von Konkurrenz um Ressourcen aufeinander warten. Ohne externe Kraft können sie nicht vorankommen. Zu diesem Zeitpunkt befindet sich das System in einem Deadlock-Zustand oder das System hat einen Deadlock. Diese Prozesse, die immer aufeinander warten, werden als Deadlock-Prozesse bezeichnet.

Manifestation eines Deadlocks

Es gibt zwei spezifische Erscheinungsformen eines Deadlocks:

Die MySQL-Anweisungen „Add“ und „Modify“ funktionieren nicht richtig. Wenn Sie das MySQL-GUI-Tool verwenden, um den Wert eines Felds zu bearbeiten, tritt eine Ausnahme auf. So vermeiden Sie Deadlocks

Um Deadlocks vorzubeugen, müssen Sie Situationen vermeiden, in denen Deadlock-Bedingungen erfüllt sind. Zu diesem Zweck müssen wir während des Entwicklungsprozesses die folgenden Grundsätze befolgen:

1. Versuchen Sie, die gleichzeitige Ausführung von Anweisungen zu vermeiden, bei denen Daten geändert werden.

2. Bei jeder Transaktion müssen alle zu verwendenden Daten gleichzeitig gesperrt werden, andernfalls ist die Ausführung nicht zulässig.

3. Eine Sperrreihenfolge wird im Voraus festgelegt, und alle Transaktionen müssen die Daten in dieser Reihenfolge sperren. Beispielsweise sollte die Reihenfolge, in der verschiedene Prozesse Objekte innerhalb einer Transaktion aktualisieren, möglichst konsistent gehalten werden.

Deadlocks anzeigen

Es gibt viele Möglichkeiten, abzufragen, ob in MySQL eine gesperrte Tabelle vorhanden ist. Hier stellen wir nur die am häufigsten verwendete vor.

1. Laufende Transaktionen anzeigen

SELECT * FROM information_schema.INNODB_TRX

Sie können sehen, dass die Transaktion mit der Prozess-ID 3175 gesperrt ist und eine andere Transaktion mit der ID 3173 ausgeführt wird, aber noch nicht festgeschrieben wurde.

2. Gesperrte Transaktion ansehen

Wählen Sie * aus Information_Schema.InnoDB_Locks; 

3. Transaktionen anzeigen, die auf Sperren warten

Wählen Sie * aus Information_Schema.InnoDB_Lock_Waits; 

4. Prüfen Sie, ob die Tabelle gesperrt ist

OFFENE TABELLEN ANZEIGEN, bei denen In_use > 0; 

Wenn ein Deadlock auftritt, können diese Methoden Informationen zum aktuellen Deadlock abfragen.

5. Zeigen Sie das Protokoll der letzten Deadlocks an

Engine-InnoDB-Status anzeigen 

Beheben eines Deadlocks

Wenn Sie den Deadlock beheben müssen, gibt es eine einfache und brutale Möglichkeit: Suchen Sie nach der Prozess-ID und beenden Sie den Prozess direkt.

Zeigen Sie die aktuell laufenden Prozesse an

Prozessliste anzeigen

// Sie können auch SELECT * FROM information_schema.INNODB_TRX; verwenden.

Die von diesen beiden Befehlen gefundene Prozess-ID ist dieselbe.

Beenden Sie die Prozess-ID, die dem Prozess entspricht

Kill-ID

Überprüfen (prüfen, ob nach dem Beenden immer noch eine Sperre vorhanden ist)

OFFENE TABELLEN ANZEIGEN, bei denen In_use > 0;

Referenzlinks

Mysql-Ansichtstabelle und Entsperrtabelle

Was ist ein MySQL-Deadlock?

Dies ist das Ende dieses Artikels über die MySQL-Deadlock-Prüfung und Deadlock-Entfernung. Weitere Informationen zur MySQL-Deadlock-Prüfung und Deadlock-Entfernung finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Die normale Methode der MySQL-Deadlock-Prüfungsverarbeitung
  • Ursachen und Lösungen für MySQL-Deadlocks
  • Detaillierte Analyse von MySQL-Deadlock-Problemen
  • MySQL-Deadlock-Routine: inkonsistente Batch-Einfügereihenfolge unter eindeutigem Index
  • Analyse eines MySQL-Deadlock-Szenariobeispiels
  • Ein magischer MySQL-Deadlock-Troubleshooting-Datensatz
  • Analyse des Purge-Deadlock-Problems in der MySQL-Datenbank
  • Detaillierte Erläuterung der verteilten Deadlock-Erkennung und -Beseitigung durch SQL

<<:  Analyse der Ursache des Docker-Fehlers Beendet (1) vor 4 Minuten

>>:  Detaillierte Erklärung verschiedener horizontaler und vertikaler Zentrierungsmethoden in HTML (Grundlagen)

Artikel empfehlen

Sekundäre Kapselung des Elements el-table table (mit Tischhöhenanpassung)

Vorwort Während meines Praktikums in der Firma ha...

Fünf Möglichkeiten zum Durchlaufen von JavaScript-Arrays

Inhaltsverzeichnis 1. for-Schleife: grundlegend u...

JS tiefe und flache Kopierdetails

Inhaltsverzeichnis 1. Was bedeutet „Shallow Copy“...

Vue3.0+vite2 implementiert dynamisches asynchrones Lazy Loading von Komponenten

Inhaltsverzeichnis Erstellen Sie ein Vite-Projekt...

Wie stelle ich Tomcat als automatisch gestarteten Dienst ein? Der schnellste Weg

Stellen Sie Tomcat so ein, dass der Dienst automa...

Detaillierte Erklärung der MySQL-Partitionstabelle

Vorwort: Partitionierung ist ein Tabellenentwurfs...

Beispiel eines Befehls zur Linux-Hardwarekonfiguration

Hardware-Ansichtsbefehle System # uname -a # Kern...

CSS zum Erzielen eines Animationseffekts der Tik Tok-Abonnementschaltfläche

Ich habe mir vor einiger Zeit Tik Tok angesehen u...

Schnelle und sichere Methode zum Umbenennen einer MySQL-Datenbank (3 Arten)

Inhaltsverzeichnis So benennen Sie eine MySQL-Dat...