Detaillierte Erläuterung der MySQL-Deadlock-Prüfung und Beispiele zur Deadlock-Entfernung

Detaillierte Erläuterung der MySQL-Deadlock-Prüfung und Beispiele zur Deadlock-Entfernung

1. Abfragevorgang

Prozessliste anzeigen

2. Fragen Sie den entsprechenden Prozess ab und beenden Sie die ID

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

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

zeige OFFENE TABELLEN, bei denen In_use > 0 ist;

Beispiel:

Erstellen Sie eine neue Sitzung und führen Sie das folgende Beispiel für eine Displaysperre aus

SPERRT TABELLEN account_data.account LESEN;
Wählen Sie Sleep (160);
TABELLEN ENTSPERREN account_data.account;

Öffnen Sie eine weitere Sitzung, um den Status der Sperrtabelle zu überprüfen:

mysql> zeige OFFENE TABELLEN, bei denen In_use > 0 ist;
+--------------+---------+--------+-------------+
| Datenbank | Tabelle | In_Verwendung | Name_gesperrt |
+--------------+---------+--------+-------------+
| Kontodaten | Konto | 1 | 0 |
+--------------+---------+--------+-------------+
1 Zeile im Satz (0,00 Sek.)

mysql> wähle * aus information_schema.innodb_locks\G;
Leerer Satz, 1 Warnung (0,00 Sek.)

FEHLER: 
Keine Abfrage angegeben

mysql> Prozessliste anzeigen\G;
*************************** 1. Reihe ***************************
  ID: 5
 Benutzer: root
 Gastgeber: 192.168.0.206:64294
  db: NULL
Befehl: Schlafen
 Zeit: 4051
 Zustand: 
 Info: NULL
*************************** 2. Reihe ***************************
  ID: 8
 Benutzer: root
 Gastgeber: 192.168.0.206:64297
  db: NULL
Befehl: Schlafen
 Zeit: 4042
 Zustand: 
 Info: NULL
*************************** 3. Reihe ***************************
  ID: 10
 Benutzer: root
 Host: localhost
  db: NULL
Befehl: Abfrage
 Zeit: 0
 Status: beginnend
 Info: Prozessliste anzeigen
*************************** 4. Reihe ***************************
  ID: 19
 Benutzer: root
 Gastgeber: 192.168.0.206:54603
  db:Kontodaten
Befehl: Schlafen
 Zeit: 245
 Zustand: 
 Info: NULL
*************************** 5. Reihe ***************************
  ID: 20
 Benutzer: root
 Gastgeber: 192.168.0.206:54604
  db:information_schema
Befehl: Abfrage
 Zeit: 20
 Status: Benutzerschlaf
 Info: wähle sleep(160)
5 Zeilen im Satz (0,00 Sek.)

FEHLER: 
Keine Abfrage angegeben

MySQL>

3. In 5.5 werden der Bibliothek information_schema (InnoDB-Engine) drei Sperrtabellen hinzugefügt:

innodb_trx ## Alle aktuell laufenden Transaktionen

innodb_locks ## Aktuelle Sperren

innodb_lock_waits ## Korrespondenz zwischen Sperrwartezeiten

Schauen wir uns die Strukturen dieser drei Tabellen an:

[email protected]: Informationsschema 13:28:38> Beschreibung innodb_locks;
+————-+———————+——+—–+———+——-+
| Feld | Typ | Null | Schlüssel | Standard | Extra |
+————-+———————+——+—–+———+——-+
| lock_id | varchar(81) | NEIN | | | |#Sperr-ID
| lock_trx_id | varchar(18) | NEIN | | | |#Transaktions-ID, der das Schloss gehört
| lock_mode | varchar(32) | NEIN | | | |#Sperrmodus | lock_type | varchar(32) | NEIN | | | |#Sperrtyp | lock_table | varchar(1024) | NEIN | | | |#Gesperrte Tabelle | lock_index | varchar(1024) | JA | | NULL | |#Gesperrter Index | lock_space | bigint(21) unsigned | JA | | NULL | |#Nummer des gesperrten Tablespace | lock_page | bigint(21) unsigned | JA | | NULL | |#Nummer der gesperrten Seite | lock_rec | bigint(21) unsigned | JA | | NULL | |#Nummer des gesperrten Datensatzes | lock_data | varchar(8192) | JA | | NULL | |#Gesperrte Daten+————-+———————+——+—–+———+——-+
10 Zeilen im Satz (0,00 Sek.)
 
[email protected]:information_schema 13:28:56>desc innodb_lock_waits;
+——————-+————-+——+—–+———+——-+
| Feld | Typ | Null | Schlüssel | Standard | Extra |
+——————-+————-+——+—–+———+——-+
| requesting_trx_id | varchar(18) | NEIN | | | |#Transaktions-ID, die die Sperre anfordert
| requested_lock_id | varchar(81) | NEIN | | | |#Sperr-ID des angeforderten Schlosses
| blocking_trx_id | varchar(18) | NEIN | | | |#Transaktions-ID, die derzeit die Sperre besitzt
| blocking_lock_id | varchar(81) | NEIN | | | |#Die Sperr-ID der aktuellen Sperre
+——————-+————-+——+—–+———+——-+
4 Zeilen im Satz (0,00 Sek.)
 
[email protected] : information_schema 13:29:05> desc innodb_trx ;
+—————————-+———————+——+—–+———————+——-+
| Feld | Typ | Null | Schlüssel | Standard | Extra |
+—————————-+———————+——+—–+———————+——-+
| trx_id | varchar(18) | NEIN | | | |#Transaktions-ID
| trx_state | varchar(13) | NEIN | | | |#Transaktionsstatus:
| trx_started | datetime | NEIN | | 0000-00-00 00:00:00 | |#Startzeit der Transaktion;
| trx_requested_lock_id | varchar(81) | JA | | NULL | |#innodb_locks.lock_id
| trx_wait_started | datetime | JA | | NULL | |#Wartezeit für Transaktionsstart | trx_weight | bigint(21) unsigned | NEIN | | 0 | |#
| trx_mysql_thread_id | bigint(21) unsigned | NEIN | | 0 | |#Transaktions-Thread-ID
| trx_query | varchar(1024) | JA | | NULL | |#Spezifische SQL-Anweisung| trx_operation_state | varchar(64) | JA | | NULL | |#Aktueller Betriebsstatus der Transaktion| trx_tables_in_use | bigint(21) unsigned | NEIN | | 0 | |#Wie viele Tabellen werden in der Transaktion verwendet?| trx_tables_locked | bigint(21) unsigned | NEIN | | 0 | |#Wie viele Sperren hat die Transaktion?| trx_lock_structs | bigint(21) unsigned | NEIN | | 0 | |#
| trx_lock_memory_bytes | bigint(21) unsigned | NEIN | | 0 | |#Für Transaktion gesperrte Speichergröße (B)
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3s::::::333:33333333333333333333ag33333333333333333333333333333 es333333333333333333333333333333 es33 nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht dann dann dann dann aber33333333333333333333 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 dann3 dann3 aber3 dann3 nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht dann nichtie dasen aber aber abersossoss aberstens aberstensss aberten aber abers :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3s::::::333:33333333333333333333ag33333333333333333333333333333 es333333333333333333333333333333 es33 nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht dann dann dann dann aber33333333333333333333 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 dann3 dann3 aber3 dann3 nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht dann nichtie dasen aber aber abersossoss aberstens aberstensss aberten aber abers :::::::::::
| trx_adaptive_hash_timeout | bigint(21) unsigniert | NEIN | | 0 | |#
+—————————-+———————+——+—–+———————+——-+
22 Zeilen im Satz (0,01 Sek.)

Gesperrte Transaktionen anzeigen

Wählen Sie * aus Information_Schema.InnoDB_Locks;

Anzeigen von Transaktionen, die auf Sperren warten

Wählen Sie * aus Information_Schema.InnoDB_Lock_Waits;

Informationen zum Thread zum Blockieren von Sperren anzeigen

3.1 Verwenden Sie show processlist zum Anzeigen

3.2 Verwenden Sie den InnoDB-Status der Show Engine zur direkten Anzeige

------------ 
TRANSAKTIONEN 
------------ 
Trx-ID-Zähler 4131 
Bereinigung für TRXs Nr. 0 < 4119 durchgeführt Rückgängig machen Nr. 0 < 0 Status: läuft, aber im Leerlauf 
Länge der Verlaufsliste: 126 
LISTE DER TRANSAKTIONEN FÜR JEDE SITZUNG: 
---TRANSACTION 0, nicht gestartet 
MySQL-Thread-ID 2, OS-Thread-Handle 0x7f953ffff700, Abfrage-ID 115, Localhost-Root-Init 
Engine-InnoDB-Status anzeigen 
---TRANSACTION 4130, AKTIV 41 Sek. Start des Indexlesens 
MySQL-Tabellen in Verwendung 1, gesperrt 1 
LOCK WAIT 2 Sperrstruktur(en), Heap-Größe 360, 1 Zeilensperre(n) 
MySQL-Thread-ID 4, OS-Thread-Handle 0x7f953ff9d700, Abfrage-ID 112, Localhost-Root wird aktualisiert 
Löschen von emp, wobei empno=7788 
------- TRX HAT 41 SEKUNDEN AUF DIE GEWÄHRUNG DIESER SPERRE GEWARTET: ## 41 Sekunden gewartet 
Datensatzsperren, Speicherplatz-ID 16, Seitennummer 3, n Bits 88, Index „PRIMARY“ der Tabelle „test“. „emp“ TRX-ID 4130, Sperrmodus X sperrt Datensatz, aber nicht Lückenwartezeit 
Datensatzsperre, Heap Nr. 9 PHYSIKALISCHER DATENSATZ: n_Felder 10; kompaktes Format; Infobits 0 ## Thread 4 wartet darauf, dem Primärschlüssel in test.emp, Seitennummer=3, eine X-Sperre hinzuzufügen. 
 0: Länge 4; Hex 80001e6c; asc l;; 
 1: Länge 6; Hex 000000001018; aufsteigend ;; 
 2: Länge 7; Hex 91000001420084; aufsteigend B ;; 
 3: Länge 5; Hex 53434f5454; aufsteigend SCOTT;; 
 4: Länge 7; Hex 414e414c595354; aufsteigend ANALYST;; 
 5: Länge 4; Hex 80001d8e; aufsteigend ;; 
 6: Länge 4; Hex 208794f0; aufsteigend ;; 
 7: Länge 4; Hex 80000bb8; aufsteigend ;; 
 8: SQL NULL; 
 9: Länge 4; Hex 80000014; aufsteigend ;; 
 
------------------ 
---TRANSACTION 4129, AKTIV 45 Sek. Start des Indexlesens 
MySQL-Tabellen in Verwendung 1, gesperrt 1 
LOCK WAIT 2 Sperrstruktur(en), Heap-Größe 360, 1 Zeilensperre(n) 
MySQL-Thread-ID 7, OS-Thread-Handle 0x7f953ff6c700, Abfrage-ID 111, Localhost-Root wird aktualisiert 
Aktualisiere emp setze sal=3500, wobei empno=7788 
------- TRX HAT 45 SEKUNDEN AUF DIE GEWÄHRUNG DIESER SPERRE GEWARTET: ## 45 Sekunden gewartet 
Datensatzsperren, Speicherplatz-ID 16, Seitennummer 3, n Bits 88, Index „PRIMARY“ der Tabelle „test“. „emp“ TRX-ID 4129, Sperrmodus X sperrt Datensatz, aber nicht Lückenwartezeit 
Datensatzsperre, Heap Nr. 9 PHYSIKALISCHER DATENSATZ: n_Felder 10; kompaktes Format; Infobits 0 ## Thread 7 wartet darauf, dem Primärschlüssel in test.emp, Seitennummer=3, eine X-Sperre hinzuzufügen. 
 0: Länge 4; Hex 80001e6c; asc l;; 
 1: Länge 6; Hex 000000001018; aufsteigend ;; 
 2: Länge 7; Hex 91000001420084; aufsteigend B ;; 
 3: Länge 5; Hex 53434f5454; aufsteigend SCOTT;; 
 4: Länge 7; Hex 414e414c595354; aufsteigend ANALYST;; 
 5: Länge 4; Hex 80001d8e; aufsteigend ;; 
 6: Länge 4; Hex 208794f0; aufsteigend ;; 
 7: Länge 4; Hex 80000bb8; aufsteigend ;; 
 8: SQL NULL; 
 9: Länge 4; Hex 80000014; aufsteigend ;; 
 
------------------ 
---TRANSAKTION 4128, AKTIV 51 Sek. 
2 Sperrstrukturen, Heap-Größe 360, 1 Zeilensperre 
MySQL-Thread-ID 3, OS-Thread-Handle 0x7f953ffce700, Abfrage-ID 110, Localhost-Root wird bereinigt

Wir wissen, dass die Hauptursache immer noch Thread=3 ist, aber dieses Ergebnis kann nicht vom InnoDB-Status aus analysiert werden.

Aus dem Obigen können wir erkennen, dass sowohl Thread 4 als auch Thread 7 darauf warten, dem Primärschlüssel in test.emp, Seite num=3, eine X-Sperre hinzuzufügen. Thread 7 wartet jedoch 45 Sekunden, während Thread 4 41 Sekunden wartet. Die Sperre wird später als bei Thread 7 angewendet, sodass festgestellt werden kann, dass Thread 7 Thread 4 blockiert hat. Die Grundursache, warum Thread 7 wartet, kann hier nicht analysiert werden.

3.3 Verwenden Sie mysqladmin debug zum Anzeigen

# mysqladmin -S /tmp/mysql3306.sock debug

Im Fehlerprotokoll wird dann Folgendes angezeigt:

Thread database.table_name Gesperrt/Wartend Lock_type 
 
 
3 test.t3 Gesperrt - lesen Lesesperre mit niedriger Priorität 
7 test.emp Gesperrt - schreiben Schreibsperre mit hoher Priorität

Mit dieser Methode können wir feststellen, dass Thread-ID=3 und 7 Blockierer sind, aber es ist immer noch nicht genau genug, um zu bestimmen, dass Thread 7 auch durch Thread-ID=3 blockiert wird.

3.4 Verwenden Sie innodb_lock_monitor, um den blockierenden Sperrthread abzurufen

MySQL [test]> CREATE TABLE innodb_lock_monitor (a INT) ENGINE=INNODB; ## Erstellen Sie diese Tabelle in einer beliebigen Datenbank und der Sperrmonitor wird aktiviert 
Abfrage OK, 0 Zeilen betroffen, 1 Warnung (0,07 Sek.) 
 
MySQL [test]> Warnungen anzeigen\G 
*************************** 1. Reihe *************************** 
 Stufe: Warnung 
 Code: 131 
Nachricht: Die Verwendung des Tabellennamens innodb_lock_monitor zum Aktivieren der Diagnoseausgabe ist veraltet und wird in zukünftigen Versionen möglicherweise entfernt. Verwenden Sie INFORMATION_SCHEMA- oder PERFORMANCE_SCHEMA-Tabellen oder SET GLOBAL innodb_status_output=ON. 
1 Zeile im Satz (0,00 Sek.)

Hinweis: Dies führt zu einer Warnung in 5.6, hat jedoch keine Auswirkungen auf die Nutzung.

Verwenden Sie dann „show engine innodb status“, um Folgendes anzuzeigen:

------------ 
TRANSAKTIONEN 
------------ 
Trx-ID-Zähler 4667 
Bereinigung für TRXs Nr. 0 < 4659 durchgeführt Rückgängig machen Nr. 0 < 0 Status: läuft, aber im Leerlauf 
Länge der Verlaufsliste 138 
LISTE DER TRANSAKTIONEN FÜR JEDE SITZUNG: 
---TRANSACTION 0, nicht gestartet 
MySQL-Thread-ID 9, OS-Thread-Handle 0x7f813c5f7700, Abfrage-ID 152, Localhost-Root-Init 
Engine-InnoDB-Status anzeigen 
---TRANSACTION 4663, AKTIV 78 Sek. Start des Indexlesens 
MySQL-Tabellen in Verwendung 1, gesperrt 1 
LOCK WAIT 2 Sperrstruktur(en), Heap-Größe 360, 1 Zeilensperre(n) 
MySQL-Thread-ID 4, OS-Thread-Handle 0x7f813c628700, Abfrage-ID 149, Localhost-Root-Aktualisierung 
Löschen von emp, wobei empno=7788 
------- TRX HAT 78 SEKUNDEN AUF DIE GEWÄHRUNG DIESER SPERRE GEWARTET: ## 78 Sekunden gewartet 
Datensatzsperren, Speicherplatz-ID 16, Seitennummer 3, n Bits 88, Index „PRIMARY“ der Tabelle „test“. „emp“ TRX-ID 4663, Sperrmodus X sperrt Datensatz, aber nicht Lückenwartezeit 
Datensatzsperre, Heap Nr. 9 PHYSIKALISCHER DATENSATZ: n_Felder 10; kompaktes Format; Infobits 0 ## Thread 4 wartet darauf, dem Primärschlüssel in test.emp, Seitennummer=3, eine X-Sperre hinzuzufügen. 
 0: Länge 4; Hex 80001e6c; asc l;; 
 1: Länge 6; Hex 000000001018; aufsteigend ;; 
 2: Länge 7; Hex 91000001420084; aufsteigend B ;; 
 3: Länge 5; Hex 53434f5454; aufsteigend SCOTT;; 
 4: Länge 7; Hex 414e414c595354; aufsteigend ANALYST;; 
 5: Länge 4; Hex 80001d8e; aufsteigend ;; 
 6: Länge 4; Hex 208794f0; aufsteigend ;; 
 7: Länge 4; Hex 80000bb8; aufsteigend ;; 
 8: SQL NULL; 
 9: Länge 4; Hex 80000014; aufsteigend ;; 
 
------------------ 
TABELLENSPERRE Tabelle „test“. „emp“ TRX-ID 4663 Sperrmodus IX ## Bevor Sie der Primärschlüsselzeile eine X-Sperre hinzufügen, fügen Sie der Tabelle zuerst eine Absichtssperre IX hinzu. 
Datensatzsperren, Speicherplatz-ID 16, Seitennummer 3, n Bits 88, Index „PRIMARY“ der Tabelle „test“. „emp“ TRX-ID 4663, Sperrmodus X sperrt Datensatz, aber nicht Lückenwartezeit 
Datensatzsperre, Heap Nr. 9 PHYSIKALISCHER DATENSATZ: n_Felder 10; kompaktes Format; Infobits 0 
 0: Länge 4; Hex 80001e6c; asc l;; 
 1: Länge 6; Hex 000000001018; aufsteigend ;; 
 2: Länge 7; Hex 91000001420084; aufsteigend B ;; 
 3: Länge 5; Hex 53434f5454; aufsteigend SCOTT;; 
 4: Länge 7; Hex 414e414c595354; aufsteigend ANALYST;; 
 5: Länge 4; Hex 80001d8e; aufsteigend ;; 
 6: Länge 4; Hex 208794f0; aufsteigend ;; 
 7: Länge 4; Hex 80000bb8; aufsteigend ;; 
 8: SQL NULL; 
 9: Länge 4; Hex 80000014; aufsteigend ;; 
 
---TRANSACTION 4662, AKTIV 81 Sek. Start des Indexlesens 
MySQL-Tabellen in Verwendung 1, gesperrt 1 
LOCK WAIT 2 Sperrstruktur(en), Heap-Größe 360, 1 Zeilensperre(n) 
MySQL-Thread-ID 7, OS-Thread-Handle 0x7f813c5c6700, Abfrage-ID 148, Localhost-Root-Aktualisierung 
Aktualisiere emp setze sal=3500, wobei empno=7788 
------- TRX HAT 81 SEKUNDEN AUF DIE GEWÄHRUNG DIESER SPERRE GEWARTET: ## 81 Sekunden gewartet 
Datensatzsperren, Speicherplatz-ID 16, Seitennummer 3, n Bits 88, Index „PRIMARY“ der Tabelle „test“. „emp“ TRX-ID 4662, Sperrmodus X sperrt Datensatz, aber nicht Lückenwartezeit 
Datensatzsperre, Heap Nr. 9 PHYSIKALISCHER DATENSATZ: n_Felder 10; kompaktes Format; Infobits 0 ## Thread 7 wartet darauf, dem Primärschlüssel in test.emp, Seitennummer=3, eine X-Sperre hinzuzufügen. 
 0: Länge 4; Hex 80001e6c; asc l;; 
 1: Länge 6; Hex 000000001018; aufsteigend ;; 
 2: Länge 7; Hex 91000001420084; aufsteigend B ;; 
 3: Länge 5; Hex 53434f5454; aufsteigend SCOTT;; 
 4: Länge 7; Hex 414e414c595354; aufsteigend ANALYST;; 
 5: Länge 4; Hex 80001d8e; aufsteigend ;; 
 6: Länge 4; Hex 208794f0; aufsteigend ;; 
 7: Länge 4; Hex 80000bb8; aufsteigend ;; 
 8: SQL NULL; 
 9: Länge 4; Hex 80000014; aufsteigend ;; 
 
------------------ 
TABELLENSPERRE Tabelle „test“. „emp“ TRX-ID 4662 Sperrmodus IX ## Bevor Sie der Primärschlüsselzeile eine X-Sperre hinzufügen, fügen Sie der Tabelle zuerst eine Absichtssperre IX hinzu. 
Datensatzsperren, Speicherplatz-ID 16, Seitennummer 3, n Bits 88, Index „PRIMARY“ der Tabelle „test“. „emp“ TRX-ID 4662, Sperrmodus X sperrt Datensatz, aber nicht Lückenwartezeit 
Datensatzsperre, Heap Nr. 9 PHYSIKALISCHER DATENSATZ: n_Felder 10; kompaktes Format; Infobits 0 
 0: Länge 4; Hex 80001e6c; asc l;; 
 1: Länge 6; Hex 000000001018; aufsteigend ;; 
 2: Länge 7; Hex 91000001420084; aufsteigend B ;; 
 3: Länge 5; Hex 53434f5454; aufsteigend SCOTT;; 
 4: Länge 7; Hex 414e414c595354; aufsteigend ANALYST;; 
 5: Länge 4; Hex 80001d8e; aufsteigend ;; 
 6: Länge 4; Hex 208794f0; aufsteigend ;; 
 7: Länge 4; Hex 80000bb8; aufsteigend ;; 
 8: SQL NULL; 
 9: Länge 4; Hex 80000014; aufsteigend ;; 
 
---TRANSAKTION 4615, AKTIV 1579 Sek., Thread innerhalb von InnoDB 1222 deklariert 
MySQL-Tabellen im Einsatz 2, gesperrt 0 
2 Sperrstrukturen, Heap-Größe 360, 1 Zeilensperre 
MySQL-Thread-ID 3, OS-Thread-Handle 0x7f813c659700, Abfrage-ID 147, Localhost-Root, Daten werden gesendet 
select count(*) from t3 a,t3 b ## Dies ist das SQL, das aktuell von Thread 3 ausgeführt wird 
Trx-Lese-Ansicht sieht keine TRX mit ID >= 4662, sieht < 4659 
TABELLENSPERRE Tabelle „test“. „emp“ TRX-ID 4615 Sperrmodus IX ## Thread 3 hält eine beabsichtigte IX-Sperre für die Tabelle und eine Zeilensperre X für den Primärschlüssel der Tabelle „test.emp“, Seitennummer=3 
Datensatzsperren, Speicherplatz-ID 16, Seitennummer 3, n Bits 88, Index „PRIMARY“ der Tabelle „test“. „emp“ TRX-ID 4615, Sperrmodus X sperrt Datensatz, aber nicht Lücke 
Datensatzsperre, Heap Nr. 9 PHYSIKALISCHER DATENSATZ: n_Felder 10; kompaktes Format; Infobits 0 
 0: Länge 4; Hex 80001e6c; asc l;; 
 1: Länge 6; Hex 000000001018; aufsteigend ;; 
 2: Länge 7; Hex 91000001420084; aufsteigend B ;; 
 3: Länge 5; Hex 53434f5454; aufsteigend SCOTT;; 
 4: Länge 7; Hex 414e414c595354; aufsteigend ANALYST;; 
 5: Länge 4; Hex 80001d8e; aufsteigend ;; 
 6: Länge 4; Hex 208794f0; aufsteigend ;; 
 7: Länge 4; Hex 80000bb8; aufsteigend ;; 
 8: SQL NULL; 
 9: Länge 4; Hex 80000014; aufsteigend ;;

Warum führt Thread 3 derzeit eine Select-t3-Tabellenoperation aus, sperrt aber die Seite num=3 in der Tabelle test.emp?

Es ist möglich, dass die Transaktion von Thread 3 in der Tabelle test.emp nicht rechtzeitig festgeschrieben wurde.

Daraus können wir schließen, dass Thread 3 Thread 7 blockiert und Thread 7 Thread 4, sodass die Grundursache Thread 3 ist. Senden Sie Thread 3 einfach so schnell wie möglich ab oder beenden Sie ihn.

3.5. Überprüfen Sie den Sperrstatus der Tabelle:

mysql> Status wie „Tabelle%“ anzeigen;
+----------------------------+---------+
| Variablenname | Wert |
+----------------------------+---------+
| Tabellensperren_sofort | 100 |
| Auf Tabellensperren gewartet | 11 |
+----------------------------+---------+

3.6. Überprüfen Sie die Statusvariable InnoDB_row_lock, um den Zeilensperrenkonflikt im System zu analysieren:

mysql> Status wie „InnoDB_row_lock%“ anzeigen;
+-------------------------------+--------+
| Variablenname | Wert |
+-------------------------------+--------+
| Innodb_row_lock_current_waits | 0 |
| Innodb_row_lock_time | 159372 |
| Innodb_row_lock_time_avg | 39843 |
| Innodb_row_lock_time_max | 51154 |
| Innodb_row_lock_waits | 4 |
+-------------------------------+--------+
5 Zeilen im Satz (0,01 Sek.)

MySQL>

4. Fazit

Bei der Analyse der Sperrblockierung in InnoDB vergleichen wir mehrere Methoden:

(1) Die Verwendung von „show processlist“ zum Anzeigen ist unzuverlässig.

(2) Die Grundursache des Problems kann nicht direkt mithilfe von „show engine innodb status“ ermittelt werden.

(3) Wenn Sie mit dem Debug-Tool von mysqladmin alle Threads anzeigen, die Sperren generieren, können Sie diese zwar sehen, aber nicht feststellen, welcher die Grundursache ist.

(4) Nachdem Sie innodb_lock_monitor aktiviert haben, verwenden Sie „show engine innodb status“, um die Grundursache für die Sperrblockierung zu finden.

Referenz: https://www.jb51.net/article/201222.htm

Dies ist das Ende dieses Artikels über die MySQL-Deadlock-Prüfung und Deadlock-Entfernung. Weitere relevante Inhalte zur MySQL-Deadlock-Prüfung und Deadlock-Entfernung finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Mysql fragt die ausgeführten Transaktionen ab und wie auf Sperren gewartet werden soll
  • MySQL Online-Übung zur Deadlock-Analyse
  • Ausführliche Erläuterung der Mysql-Deadlock-Anzeige und Deadlock-Entfernung
  • Die normale Methode der MySQL-Deadlock-Prüfungsverarbeitung
  • Ursachen und Lösungen für MySQL-Deadlocks
  • MySQL-Deadlock-Routine: inkonsistente Batch-Einfügereihenfolge unter eindeutigem Index
  • Lösen Sie die MySQL-Deadlock-Routine, indem Sie verschiedene Indizes aktualisieren
  • Verstehen von MySQL-Deadlock-Routinen durch eindeutige Index-S-Sperre und X-Sperre
  • Detaillierte Erklärung, wie MySQL (InnoDB) mit Deadlocks umgeht
  • Analyse von MySQL-Lock-Wait- und Deadlock-Problemen

<<:  Erstellen Sie mit Flutter eine verschiebbare Stapel-Widget-Funktion

>>:  Reine CSS-Implementierung (kein Skript) Tooltip-Textaufforderungseffekt im HTML-Befehlsstil

Artikel empfehlen

Detaillierte Erklärung des Middleman-Modus von Angular-Komponenten

Inhaltsverzeichnis 1. Mittelsmann-Modell 2. Beisp...

Eine audiovisuelle Linux-Distribution, die Audiophile anspricht

Ich bin kürzlich auf das Audiovisual Linux Projec...

Beispiele für JavaScript-Operationselemente

Weitere Informationen zu Bedienelementen finden S...

Docker-Zeitzonenproblem und Datenmigrationsproblem

Neueste Lösung: -v /usr/share/zoneinfo/Asia/Shang...

HTML+CSS zur Realisierung einer einfachen Navigationsleistenfunktion

Ohne weitere Umschweife komme ich gleich zum Code...

Detaillierte Erklärung der Verwendung des chmod-Befehls in Linux

chmod-Befehlssyntax Dies ist die korrekte Syntax ...

Lösung für das Problem mit verstümmelten chinesischen MySQL-Zeichen

1. Die chinesischen verstümmelten Zeichen erschei...

Vue implementiert einen visuellen Drag-Page-Editor

Inhaltsverzeichnis Drag & Drop-Implementierun...

React+Typescript implementiert die Countdown-Hook-Methode

Zunächst wird setInterval als Hook gekapselt 👇 im...

Detaillierte Erklärung der neuen Erfahrung von Vite

Was ist Vite? (Es ist ein neues Spielzeug im Fron...

VM VirtualBox virtuelle Maschine mounten freigegebenen Ordner

Eine Umgebung Installieren Sie VMware Tools auf C...

So installieren Sie MySQL über Yum auf CentOS7

1. Überprüfen Sie, ob MySQL installiert ist Yum-L...

Detaillierte Erklärung der Verwendung des Linux-Befehls lsof

lsof (List Open Files) ist ein Tool zum Anzeigen ...