首页  >  文章  >  数据库  >  如何识别MySQL中导致“等待表元数据锁”的事务?

如何识别MySQL中导致“等待表元数据锁”的事务?

DDD
DDD原创
2024-10-31 01:19:29644浏览

How to Identify Transactions Causing

识别导致“等待表元数据锁定”状态的事务

尝试在表上执行 DDL 操作时,可能会遇到SHOW PROCESSLIST 中显示“正在等待表元数据锁定”消息。这表明另一个事务仍在引用该表,从而防止其元数据被更改。

识别事务

5.7.3 之前的 MySQL 版本:

  • 运行命令:SHOW ENGINE INNODB STATUS G
  • 找到“TRANSACTIONS”部分。

对于 MySQL 版本 5.7 .3 及更高版本:

  • 利用 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 * 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';

示例输出:

INNODB_LOCK_WAITS 查询可能提供类似于以下内容的输出:

...
REQUESTING TRXs:
trx id 10,mysql thread id 1161142,query SELECT ...
trx id 16,mysql thread id 1161141,query SELECT ...
...

这表明事务 ID 10 和 16 正在等待锁定。可以使用提供的其他查询进行进一步分析,以识别阻塞事务和被锁定的特定表。

以上是如何识别MySQL中导致“等待表元数据锁”的事务?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn