sql >> Database teknologi >  >> RDS >> Mysql

Hvordan finder jeg ud af, hvilken transaktion der forårsager en Venter på tabel-metadatalåsetilstand?

Virker til MySql version <5.7.3

SHOW ENGINE INNODB STATUS \G

Se efter afsnittet -

TRANSACTIONS

Vi kan bruge INFORMATION_SCHEMA Tabeller.

Nyttige forespørgsler

For at tjekke om alle de låse, transaktioner venter på:

USE INFORMATION_SCHEMA;
SELECT * FROM INNODB_LOCK_WAITS;

En liste over blokerende 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 liste over låse på et bestemt bord:

SELECT * FROM INNODB_LOCKS 
WHERE LOCK_TABLE = db_name.table_name;

En liste over transaktioner, der venter på låse:

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

Reference - MySQL-fejlfinding:Hvad skal man gøre, når forespørgsler ikke virker , Kapitel 6 - Side 96.



  1. Forvirring med Oracle CONNECT BY

  2. EM 12c Justering af tærskelværdier

  3. Oprettelse af en datamodel for samkørsel

  4. Hvordan kan jeg få summen af ​​flere datetime-værdier?