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

Beispielcode zur Implementierung eines Musikplayers mit nativem JS

Dieser Artikel stellt hauptsächlich den Beispielc...

14 Möglichkeiten zum Erstellen von Website-Inhalten, die Ihre Besucher fesseln

Wenn ich im Internet surfe, sehe ich oft Websites...

Verwenden von Shadowsocks zum Erstellen eines transparenten LAN-Gateways

Inhaltsverzeichnis Installieren und konfigurieren...

Tutorial zur Installation von Odoo14 aus dem Quellcode unter Ubuntu 18.04

Inhaltsverzeichnis Hintergrund dieser Serie Überb...

So implementieren Sie die Formularvalidierung in Vue

1. Installation und Nutzung Installieren Sie es z...

ReactRouter-Implementierung

ReactRouter-Implementierung ReactRouter ist die K...

Detailliertes Tutorial zur VMware-Installation des Linux CentOS 7.7-Systems

So installieren Sie das Linux CentOS 7.7-System i...

Rückblick auf die besten Webdesign-Arbeiten 2012 [Teil 1]

Zum Beginn des neuen Jahres möchte ich meinen Fre...

So zeigen Sie die IP-Adresse von Linux in einer virtuellen VMware-Maschine an

1. Doppelklicken Sie zunächst auf das VMware-Symb...