So überprüfen Sie, wo die Metadatensperre in MySQL blockiert ist

So überprüfen Sie, wo die Metadatensperre in MySQL blockiert ist

So überprüfen Sie, wo die Metadatensperre in MySQL blockiert ist

Schritte:

1. Durchführung von Sitzung 1:

   Transaktion starten;
   wähle *aus t1;

2. Sitzung 2 wird nach Schritt 1 ausgeführt:

  Tabelle t1 löschen;

Zu diesem Zeitpunkt ist die Drop-Anweisung von Sitzung 2 blockiert. Wie können Sie also Metadatensperren analysieren und anzeigen?

Verfahren:

1) Führen Sie „show processlist;“ aus. Sie sehen dann, dass die Drop-Anweisung auf die Metadatensperre wartet.

mysql> Prozessliste anzeigen; 
+----+----------+----------+------+---------+---------+---------+-----------------------------------------------------------------+------------------+ 
| ID | Benutzer | Host | db | Befehl | Zeit | Status | Info | 
+----+----------+----------+------+---------+---------+---------+-----------------------------------------------------------------+------------------+ 
| 5 | Systembenutzer | | NULL | Verbinden | 1050234 | Warte darauf, dass der Master ein Ereignis sendet | NULL | 
| 6 | Systembenutzer | | NULL | Verbinden | 983193 | Slave hat das gesamte Relay-Protokoll gelesen; wartet auf die Aktualisierung durch den Slave-E/A-Thread | NULL | 
| 8 | root | localhost | yzs | Schlaf | 93 | | NULL | 
| 9 | root | localhost | yzs | Abfrage | 3 | Warte auf Sperre der Tabellenmetadaten | Tabelle t1 löschen | 
| 10 | root | localhost | NULL | Abfrage | 0 | init | Prozessliste anzeigen | 
+----+----------+----------+------+---------+---------+---------+-----------------------------------------------------------------+------------------+ 
5 Zeilen im Satz (0,00 Sek.) 

2) Sie können sehen, dass der Thread der aktuell laufenden Transaktion trx_mysql_thread_id:8 ist. Was also macht dieser Thread?

mysql> wähle * aus information_schema.innodb_trx\G 
*************************** 1. Reihe *************************** 
          trx_id: 17683 
         trx_state: LÄUFT 
        trx_started: 18.10.2017 05:32:46 
   trx_requested_lock_id: NULL 
     trx_wait_started: NULL 
        trx_gewicht: 0 
    trx_mysql_thread_id: 8 
         trx_query: NULL 
    trx_operation_state: NULL 
     trx_tables_in_use: 0 
     trx_tables_locked: 0 
     trx_lock_structs: 0 
   trx_lock_memory_bytes: 320 
      trx_rows_locked: 0 
     trx_rows_modified: 0 
  trx_concurrency_tickets: 0 
    trx_isolation_level: WIEDERHOLBARES LESEN 
     trx_unique_checks: 1 
  trx_foreign_key_checks: 1 
trx_last_foreign_key_error: NULL 
 trx_adaptive_hash_latched: 0 
 trx_adaptive_hash_timeout: 10000 
     trx_ist_schreibgeschützt: 0 
trx_autocommit_non_locking: 0 
1 Zeile im Satz (0,03 Sek.) 

3) Sie können sehen, dass dieser Thread eine Select-Anweisung ausführt. Wenn Sie „show engine innodb status“ ausführen, können Sie sehen, dass sich die Transaktion im Ruhezustand befindet, was bedeutet, dass die Transaktionsanweisung ausgeführt, aber nicht festgeschrieben wurde.

Führen Sie kill 8 aus, um den Thread der Transaktion zu beenden. Oder überprüfen Sie die SQL-Anweisungen des Unternehmens, um festzustellen, ob nicht übermittelte SQL-Anweisungen vorhanden sind.

mysql> wähle * aus performance_schema.events_statements_current\G 
*************************** 1. Reihe *************************** 
       THREAD_ID: 27 
        EVENT_ID: 15 
      END_EVENT_ID: 15 
       EVENT_NAME: Anweisung/SQL/Auswahl 
         QUELLE: mysqld.cc:962 
      TIMER_START: 1050544992900922000 
       TIMER_END: ​​​​1050544993740836000 
       TIMER_WAIT: 839914000 
       SPERRZEIT: 196000000 
        SQL_TEXT: wähle * aus t1 
         DIGEST: 1aa32397c8ec37230aed78ef16126571 
      DIGEST_TEXT: WÄHLEN SIE * AUS `t1`  
     CURRENT_SCHEMA: yzs 
      OBJECT_TYPE: NULL 
     OBJECT_SCHEMA: NULL 
      OBJECT_NAME: NULL 
 OBJECT_INSTANCE_BEGIN: NULL 
      MYSQL_ERRNO: 0 
   RETURNED_SQLSTATE: NULL 
      MESSAGE_TEXT: NULL 
         FEHLER: 0 
        WARNUNGEN: 0 
     BETROFFENE ZEILEN: 0 
       ROWS_SENT: 10 
     Untersuchte Zeilen: 10 
ERSTELLTE_TMP_DISK_TABLES: 0 
   ERSTELLTE_TMP_TABELLEN: 0 
    SELECT_FULL_JOIN: 0 
 SELECT_FULL_RANGE_JOIN: 0 
      Auswahlbereich: 0 
   Auswahlbereichsüberprüfung: 0 
      SELECT_SCAN: 1 
   SORT_MERGE_PASSES: 0 
       SORT_RANGE: 0 
       SORT_ROWS: 0 
       SORT_SCAN: 0 
     KEIN_INDEX_VERWENDET: 1 
   KEIN_GUTER_INDEX_VERWENDET: 0 
    NESTING_EVENT_ID: NULL 
   NESTING_EVENT_TYPE: NULL 

Wenn Sie Fragen haben, hinterlassen Sie bitte eine Nachricht oder kommen Sie zur Diskussion in die Community. Vielen Dank fürs Lesen und ich hoffe, es kann Ihnen helfen. Vielen Dank für Ihre Unterstützung dieser Site!

Das könnte Sie auch interessieren:
  • Detaillierte Analyse der MySQL-Sperrblockierung

<<:  Tutorial zur Installation und Konfiguration von VMware Tools für Ubuntu 18.04

>>:  Zusammenfassung der React-Grundlagen

Artikel empfehlen

Installieren Sie Kafka unter Linux

Inhaltsverzeichnis 1.1 Java-Umgebung als Vorausse...

Wie lang ist eine Funktion in js?

Inhaltsverzeichnis Vorwort Warum Wie viel kostet ...

Detaillierte Erklärung des TIMESTAMPDIFF-Falls in MySQL

1. Syntax TIMESTAMPDIFF(Einheit, Beginn, Ende); G...

Optimierung von JavaScript und CSS zur Verbesserung der Website-Leistung

<br /> Im ersten und zweiten Teil haben wir ...

js realisiert die Lupenfunktion der Shopping-Website

In diesem Artikel wird der spezifische Code von j...

IIS7 IIS8 http springt automatisch zu HTTPS (Port 80 springt zu Port 443)

IIS7 muss bestätigen, ob das pseudostatische Modu...

Detailliertes Tutorial zur Installation des Quellcodes von CentOS6.9+Mysql5.7.18

Bei der Installation des Quellcodes von CentOS6.9...