如何find哪个事务导致“等待表元数据locking”状态?
我试图在表上执行一些DDL, SHOW PROCESSLIST结果为“等待表元数据locking”消息。 
我怎样才能找出哪些交易尚未结束?
我正在使用MySQL v5.5.24。
 SHOW ENGINE INNODB STATUS \G 
寻找部分 –
 TRANSACTIONS 
我们可以使用INFORMATION_SCHEMA表。
有用的查询 –
检查交易正在等待的所有锁 –
 USE INFORMATION_SCHEMA SELECT * FROM INNODB_LOCK_WAITS; 
阻止交易的列表
 SELECT * FROM INNODB_LOCKS WHERE LOCK_TRX_ID IN (SELECT BLOCKING_TRX_ID FROM INNODB_LOCK_WAITS); 
要么
 SELECT INNODB_LOCKS.* FROM INNODB_LOCKS JOIN INNODB_LOCK_WAITS ON (INNODB_LOCKS.LOCK_TRX_ID = INNODB_LOCK_WAITS.BLOCKING_TRX_ID); 
关键表上的锁列表:
 SELECT * FROM INNODB_LOCKS WHERE LOCK_TABLE = db_name.table_name; 
等待锁的交易清单:
 SELECT TRX_ID, TRX_REQUESTED_LOCK_ID, TRX_MYSQL_THREAD_ID, TRX_QUERY FROM INNODB_TRX WHERE TRX_STATE = 'LOCK WAIT'; 
参考 – MySQL故障排除:查询不起作用时 ,第6章 – 第96页。
如果你找不到locking表的进程(因为它已经死了),它可能是一个线程仍然像这样清理
节的交易
 show engine innodb status; 
最后
 ---TRANSACTION 1135701157, ACTIVE 6768 sec MySQL thread id 5208136, OS thread handle 0x7f2982e91700, query id 882213399 xxxIPxxx 82.235.36.49 my_user cleaning up 
正如在清除事务死锁的评论中提到的那样?
你可以尝试直接在这里查杀事务线程
  KILL 5208136; 
为我工作。
  mysql 5.7通过performance_schema.metadata_locks表公开了元数据locking信息。 
文档在这里