Identifizieren von Transaktionen, die den Status „Warten auf Tabellenmetadatensperre“ verursachen
Beim Versuch, DDL-Vorgänge für eine Tabelle auszuführen, kann es vorkommen, dass Meldung „Warten auf Tabellenmetadatensperre“ in SHOW PROCESSLIST. Dies weist darauf hin, dass eine andere Transaktion immer noch auf die Tabelle verweist und verhindert, dass ihre Metadaten geändert werden.
Identifizieren der Transaktion
MySQL-Versionen vor 5.7.3:
Für MySQL-Versionen 5.7 .3 und höher:
Um alle wartenden Sperrtransaktionen zu identifizieren:
USE INFORMATION_SCHEMA; SELECT * FROM INNODB_LOCK_WAITS;
Um blockierende Transaktionen zu identifizieren:
SELECT * FROM INNODB_LOCKS WHERE LOCK_TRX_ID IN (SELECT BLOCKING_TRX_ID FROM INNODB_LOCK_WAITS);
Um Sperren für eine bestimmte Tabelle zu identifizieren:
SELECT * FROM INNODB_LOCKS WHERE LOCK_TABLE = db_name.table_name;
Zur Identifizierung Transaktionen, die auf Sperren warten:
SELECT TRX_ID, TRX_REQUESTED_LOCK_ID, TRX_MYSQL_THREAD_ID, TRX_QUERY FROM INNODB_TRX WHERE TRX_STATE = 'LOCK WAIT';
Beispielausgabe:
Die INNODB_LOCK_WAITS-Abfrage könnte eine Ausgabe ähnlich der folgenden liefern:
... REQUESTING TRXs: trx id 10,mysql thread id 1161142,query SELECT ... trx id 16,mysql thread id 1161141,query SELECT ... ...
Dies zeigt an, dass die Transaktions-IDs 10 und 16 auf die Sperre warten. Eine weitere Analyse kann mithilfe der anderen bereitgestellten Abfragen durchgeführt werden, um die blockierende Transaktion und die spezifische Tabelle, die gesperrt wird, zu identifizieren.
Das obige ist der detaillierte Inhalt vonWie identifiziere ich Transaktionen, die in MySQL zum „Warten auf Tabellenmetadatensperre' führen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!