sql >> Databáze >  >> RDS >> Mysql

Jak zjistím, která transakce způsobuje stav zámku Čekání na metadata tabulky?

Funguje pro verzi MySql <5.7.3

SHOW ENGINE INNODB STATUS \G

Hledejte sekci -

TRANSACTIONS

Můžeme použít INFORMATION_SCHEMA Tabulky.

Užitečné dotazy

Chcete-li zkontrolovat všechny zámky, na které transakce čekají:

USE INFORMATION_SCHEMA;
SELECT * FROM INNODB_LOCK_WAITS;

Seznam blokujících transakcí:

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

NEBO

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

A Seznam zámků na konkrétní tabulce:

SELECT * FROM INNODB_LOCKS 
WHERE LOCK_TABLE = db_name.table_name;

Seznam transakcí čekajících na uzamčení:

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

Reference - Odstraňování problémů s MySQL:Co dělat, když dotazy nefungují , Kapitola 6 – Strana 96.



  1. Mohu použít PDO připravený příkaz k navázání identifikátoru (název tabulky nebo pole) nebo klíčového slova syntaxe?

  2. Jak vložit soubor do databáze MySQL?

  3. Zřetězení sloupce skupinou v R

  4. Chyba při pokusu o načtení textu chyby ORA-01804