sql >> Database >  >> RDS >> Mysql

Hoe kan ik zien welke transactie een vergrendelingsstatus Wachten op tabelmetagegevens veroorzaakt?

Werkt voor MySql-versie <5.7.3

SHOW ENGINE INNODB STATUS \G

Zoek de sectie -

TRANSACTIONS

We kunnen INFORMATION_SCHEMA . gebruiken Tabellen.

Nuttige zoekopdrachten

Om te controleren op alle sloten waar transacties op wachten:

USE INFORMATION_SCHEMA;
SELECT * FROM INNODB_LOCK_WAITS;

Een lijst met blokkerende transacties:

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

OF

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

Een lijst met sloten op een bepaalde tafel:

SELECT * FROM INNODB_LOCKS 
WHERE LOCK_TABLE = db_name.table_name;

Een lijst met transacties die wachten op vergrendelingen:

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

Referentie - MySQL-probleemoplossing:wat te doen als query's niet werken , Hoofdstuk 6 - Pagina 96.



  1. hoe een tekenreeks voor een reeks te prefixen die is gegenereerd door postgresql?

  2. Hoe de IF/ELSE-instructie te gebruiken om een ​​nieuw xml-knooppuntitem in Sql bij te werken of te maken

  3. Exporteer SQLite-queryresultaten naar een CSV-bestand

  4. Webinar:nieuwe functies in Postgres 12 [vervolg]