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

Detaillierter Prozess der SpringBoot-Integration von Docker

Inhaltsverzeichnis 1. Demo-Projekt 1.1 Schnittste...

Detaillierte Erklärung, wie Sie alle untergeordneten Elemente mit CSS auswählen

Wie wähle ich mit CSS rekursiv alle untergeordnet...

mysql IS NULL mit Indexfallerklärung

Einführung Die Verwendung von „ist null“, „ist ni...

HTML lädt dynamisch CSS-Stile und JS-Skripte – Beispiel

1. Dynamisches Laden von Skripten Mit der wachsen...

Detaillierter Prozess zum Erstellen von mysql5.7.29 unter Centos7 von Linux

1. MySQL herunterladen 1.1 Download-Adresse https...

Beispielcode zur Implementierung einer Auto-Increment-Sequenz in MySQL

1. Erstellen Sie eine Sequenztabelle CREATE TABLE...

Detaillierte Zusammenfassung des JavaScript-Arrays

Inhaltsverzeichnis 1. Array-Induktion 1. Teilen S...

Das Linux-System verbietet den Remote-Login-Befehl des Root-Kontos

PS: So deaktivieren Sie die Remote-Anmeldung des ...

Analyse des HTTP-Schnittstellentestprozesses basierend auf Postman

Ich habe zufällig ein tolles Tutorial zum Thema k...