Fehlerbehebung für den Status „Warten auf Tabellenmetadatensperre“ in MySQL
Das Ausführen von DDL-Vorgängen für eine Tabelle kann gelegentlich zu einem „Warten auf Tabelle“ führen Meldung „Metadatensperre“ beim Überprüfen der SHOW PROCESSLIST. Dies zeigt an, dass eine andere Transaktion noch nicht geschlossen wurde und eine Sperre für die Tabelle hält, wodurch die Änderung verhindert wird.
Identifizieren der blockierenden Transaktion
Um festzustellen, welche Transaktion verursacht wird In diesem Zustand können die folgenden Methoden eingesetzt werden:
1. SHOW ENGINE INNODB STATUS
(Für MySQL-Versionen <5.7.3)
Führen Sie SHOW ENGINE INNODB STATUS G aus, um detaillierte Informationen zu InnoDB-Interna anzuzeigen, einschließlich des Abschnitts TRANSAKTIONEN. Dadurch werden aktive Transaktionen und deren Status aufgelistet.
2. INFORMATION_SCHEMA-Tabellen
Die Tabelle INNODB_LOCK_WAITS im INFORMATION_SCHEMA enthält Informationen zu Transaktionen, die auf Sperren warten. Um alle derartigen Transaktionen zu überprüfen, verwenden Sie:
<code class="sql">SELECT * FROM INNODB_LOCK_WAITS;</code>
Um blockierende Transaktionen zu identifizieren, führen Sie Folgendes aus:
<code class="sql">SELECT * FROM INNODB_LOCKS WHERE LOCK_TRX_ID IN (SELECT BLOCKING_TRX_ID FROM INNODB_LOCK_WAITS);</code>
Alternativ:
<code class="sql">SELECT INNODB_LOCKS.* FROM INNODB_LOCKS JOIN INNODB_LOCK_WAITS ON (INNODB_LOCKS.LOCK_TRX_ID = INNODB_LOCK_WAITS.BLOCKING_TRX_ID);</code>
Um Sperren für eine bestimmte zu überprüfen Tabelle:
<code class="sql">SELECT * FROM INNODB_LOCKS WHERE LOCK_TABLE = db_name.table_name;</code>
Um Transaktionen aufzulisten, die auf Sperren warten:
<code class="sql">SELECT TRX_ID, TRX_REQUESTED_LOCK_ID, TRX_MYSQL_THREAD_ID, TRX_QUERY FROM INNODB_TRX WHERE TRX_STATE = 'LOCK WAIT';</code>
Zusätzliche Ressourcen
Siehe MySQL-Fehlerbehebungshandbuch, Kapitel 6 , Seite 96, für weitere Einblicke in die Lösung dieses Problems.
Das obige ist der detaillierte Inhalt vonWie kann ich „Warten auf Tabellenmetadatensperre“ in MySQL identifizieren und beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!