Identifizieren von Transaktionen, die den Status „Warten auf Tabellenmetadatensperre“ verursachen
Beim Versuch, DDL-Vorgänge für eine Tabelle in MySQL-Version 5.5.24 durchzuführen, aber ein Problem auftritt „Warten auf Tabellenmetadatensperre“-Meldungen ist es wichtig, die für diese Sperre verantwortliche Transaktion zu ermitteln.
Lösung
Für MySQL-Versionen unter 5.7.3 :
Führen Sie den folgenden Befehl aus, um detaillierte Informationen zum Status abzurufen:
SHOW ENGINE INNODB STATUS \G
Suchen Sie den Abschnitt „TRANSAKTIONEN“ und identifizieren Sie die offene Transaktion, die noch geschlossen werden muss.
Für alle MySQL-Versionen:
Informationen aus den INFORMATION_SCHEMA-Tabellen abrufen:
Alle wartenden Sperren:
USE INFORMATION_SCHEMA; SELECT * FROM INNODB_LOCK_WAITS;
Transaktionen blockieren:
SELECT * FROM INNODB_LOCKS WHERE LOCK_TRX_ID IN (SELECT BLOCKING_TRX_ID FROM INNODB_LOCK_WAITS);
ODER
SELECT INNODB_LOCKS.* FROM INNODB_LOCKS JOIN INNODB_LOCK_WAITS ON (INNODB_LOCKS.LOCK_TRX_ID = INNODB_LOCK_WAITS.BLOCKING_TRX_ID);
Sperren für eine bestimmte Tabelle:
SELECT * FROM INNODB_LOCKS WHERE LOCK_TABLE = db_name.table_name;
Wartende Transaktionen:
SELECT TRX_ID, TRX_REQUESTED_LOCK_ID, TRX_MYSQL_THREAD_ID, TRX_QUERY FROM INNODB_TRX WHERE TRX_STATE = 'LOCK WAIT';
Weitere Informationen finden Sie unter „MySQL-Fehlerbehebung: Was zu tun ist, wenn Abfragen nicht funktionieren“, Kapitel 6, Seite 96 .
Das obige ist der detaillierte Inhalt vonWie kann festgestellt werden, welche Transaktion den Status „Warten auf Tabellenmetadatensperre“ in MySQL verursacht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!