VorwortVor 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 DeadlocksEs 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 anzeigenEs 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 DeadlocksWenn 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:
|
<<: Analyse der Ursache des Docker-Fehlers Beendet (1) vor 4 Minuten
1. Übergang Verwendung der Übergangseigenschaft: ...
Vorwort Während meines Praktikums in der Firma ha...
Inhaltsverzeichnis 1. for-Schleife: grundlegend u...
Inhaltsverzeichnis 1. Was bedeutet „Shallow Copy“...
Inhaltsverzeichnis Erstellen Sie ein Vite-Projekt...
Fehlermeldung: FEHLER 2002 (HY000): Verbindung zu...
Ich spiele in letzter Zeit mit Big Data. Ein Freu...
Lösung Funktion mergeImgs(Liste) { const imgDom =...
Stellen Sie Tomcat so ein, dass der Dienst automa...
Vorwort: Partitionierung ist ein Tabellenentwurfs...
Docker ist wirklich cool, vor allem, weil es im V...
Hardware-Ansichtsbefehle System # uname -a # Kern...
Ohne weitere Umschweife werde ich den Code direkt...
Ich habe mir vor einiger Zeit Tik Tok angesehen u...
Inhaltsverzeichnis So benennen Sie eine MySQL-Dat...