How do I find which transaction is causing a quot;Waiting for table metadata lockquot; state?(如何找到导致“等待表元数据锁定的事务?状态?)
问题描述
我正在尝试对表执行一些 DDL,并且 SHOW PROCESSLIST
导致等待表元数据锁定"消息.
I am trying to perform some DDL on a table and SHOW PROCESSLIST
results in a " Waiting for table metadata lock " message.
我如何知道哪些交易尚未完成?
How can I find out which transaction is not yet closed?
我使用的是 MySQL v5.5.24.
I'm using MySQL v5.5.24.
推荐答案
适用于 MySql 版本 <5.7.3
SHOW ENGINE INNODB STATUS \G
寻找部分-
TRANSACTIONS
我们可以使用INFORMATION_SCHEMA表格.
We can use INFORMATION_SCHEMA Tables.
有用的查询
要检查所有的锁事务正在等待:
To check about all the locks transactions are waiting for:
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);
特定表上的锁列表:
A List of locks on particular table:
SELECT * FROM INNODB_LOCKS
WHERE LOCK_TABLE = db_name.table_name;
等待锁定的事务列表:
A list of transactions waiting for locks:
SELECT TRX_ID, TRX_REQUESTED_LOCK_ID, TRX_MYSQL_THREAD_ID, TRX_QUERY
FROM INNODB_TRX
WHERE TRX_STATE = 'LOCK WAIT';
参考 - MySQL 故障排除:当查询不起作用时该怎么办,第 6 章 - 第 96 页.
Reference - MySQL Troubleshooting: What To Do When Queries Don't Work, Chapter 6 - Page 96.
这篇关于如何找到导致“等待表元数据锁定"的事务?状态?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何找到导致“等待表元数据锁定"的事务?状态?


基础教程推荐
- MySQL 5.7参照时间戳生成日期列 2022-01-01
- while 在触发器内循环以遍历 sql 中表的所有列 2022-01-01
- 带有WHERE子句的LAG()函数 2022-01-01
- ORA-01830:日期格式图片在转换整个输入字符串之前结束/选择日期查询的总和 2021-01-01
- 使用 VBS 和注册表来确定安装了哪个版本和 32 位 2021-01-01
- MySQL根据从其他列分组的值,对两列之间的值进行求和 2022-01-01
- CHECKSUM 和 CHECKSUM_AGG:算法是什么? 2021-01-01
- 带更新的 sqlite CTE 2022-01-01
- 如何在 CakePHP 3 中实现 INSERT ON DUPLICATE KEY UPDATE aka upsert? 2021-01-01
- 从字符串 TSQL 中获取数字 2021-01-01