sql >> Databasteknik >  >> RDS >> Mysql

Hur tar jag reda på vilken transaktion som orsakar en väntar på tabell-metadatalås?

Fungerar för MySql version <5.7.3

SHOW ENGINE INNODB STATUS \G

Leta efter avsnittet -

TRANSACTIONS

Vi kan använda INFORMATION_SCHEMA Tabeller.

Användbara frågor

För att kontrollera om alla lås transaktioner väntar på:

USE INFORMATION_SCHEMA;
SELECT * FROM INNODB_LOCK_WAITS;

En lista över blockerande transaktioner:

SELECT * 
FROM INNODB_LOCKS 
WHERE LOCK_TRX_ID IN (SELECT BLOCKING_TRX_ID FROM INNODB_LOCK_WAITS);

ELLER

SELECT INNODB_LOCKS.* 
FROM INNODB_LOCKS
JOIN INNODB_LOCK_WAITS
  ON (INNODB_LOCKS.LOCK_TRX_ID = INNODB_LOCK_WAITS.BLOCKING_TRX_ID);

En lista över lås på ett visst bord:

SELECT * FROM INNODB_LOCKS 
WHERE LOCK_TABLE = db_name.table_name;

En lista över transaktioner som väntar på lås:

SELECT TRX_ID, TRX_REQUESTED_LOCK_ID, TRX_MYSQL_THREAD_ID, TRX_QUERY
FROM INNODB_TRX
WHERE TRX_STATE = 'LOCK WAIT';

Referens - MySQL-felsökning:Vad du ska göra när frågor inte fungerar , Kapitel 6 - Sida 96.



  1. Insamlingsmetod:LIMIT-funktion i Oracle Database

  2. Skickar flera värden i en enda parameter

  3. Hur man aktiverar arkivloggningsläge i Oracle Database 19c

  4. Ansluter SquirreL SQL till Microsoft Excel