Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment puis-je trouver quelle transaction est à l'origine d'un état de verrouillage des métadonnées de table en attente ?

Fonctionne pour MySql version <5.7.3

SHOW ENGINE INNODB STATUS \G

Recherchez la section -

TRANSACTIONS

Nous pouvons utiliser INFORMATION_SCHEMA Tableaux.

Requêtes utiles

Pour vérifier toutes les transactions de verrous en attente :

USE INFORMATION_SCHEMA;
SELECT * FROM INNODB_LOCK_WAITS;

Une liste des transactions bloquantes :

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

OU

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

Une liste de verrous sur une table particulière :

SELECT * FROM INNODB_LOCKS 
WHERE LOCK_TABLE = db_name.table_name;

Une liste des transactions en attente de verrouillage :

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

Référence - Dépannage MySQL :Que faire lorsque les requêtes ne fonctionnent pas , Chapitre 6 - Page 96.