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

Das Problem der Verwendung von Slots durch Vue+tsx wird nicht behoben

Inhaltsverzeichnis Vorwort Finden Sie das Problem...

Aktivieren oder Deaktivieren des GTID-Modus in MySQL online

Inhaltsverzeichnis Grundlegende Übersicht GTID on...

Einführung in die gängigen Festplattenverwaltungsbefehle von Linux

Inhaltsverzeichnis 1. df-Befehl 2. du-Befehl 3. B...

Wissen Sie, warum Vue-Daten eine Funktion sind?

Erklärung auf der offiziellen Website: Wenn eine ...

Detaillierte Erläuterung der Nginx-Rewrite-Jump-Anwendungsszenarien

Anwendungsszenario 1: Domänennamenbasierte Umleit...

So implementieren Sie eine geplante Sicherung einer MySQL-Datenbank

1. Erstellen Sie ein Shell-Skript vim backupdb.sh...

Vergleich der JS-Array-Loop-Methode und der Effizienzanalyse

Array-Methoden JavaScript bietet viele Array-Meth...

Probleme bei der Installation von TensorRT im Docker-Container

Deinstallieren Sie die installierte Version auf U...

Detaillierte Erklärung der HTML-Programmier-Tags und der Dokumentstruktur

Der Zweck der Verwendung von HTML zum Markieren v...

So erstellen Sie DockerHub selbst

Der Docker Hub, den wir zuvor verwendet haben, wi...

Detaillierte Erklärung der MySQL-Binlog-Verwendung

binlog ist eine binäre Protokolldatei, die alle D...