mysql - 如何找到导致 "Waiting for table metadata lock"状态的事务?

标签 mysql

我正在尝试对表执行一些 DDL,并且 SHOW PROCESSLIST 导致“等待表元数据锁定”消息。

我怎样才能知道哪个交易还没有结束?

我正在使用 MySQL v5.5.24。

最佳答案

适用于 MySql 版本 < 5.7.3

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 Troubleshooting: What To Do When Queries Don't Work ,第 6 章 - 第 96 页。

关于mysql - 如何找到导致 "Waiting for table metadata lock"状态的事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13148630/

相关文章:

php - PHP 事件监听器中的多个回显删除编辑按钮

mysql - 如何让 ELMAH 登录到 MySQL?

MySQL 更新多列和数据库

sql - 输出格式化的数据库与前端

php - 如何重写此 SQL 语句以接受数组变量?

c# - 在5gbfree托管服务器的c#应用程序中使用什么服务器地址

php - 在 PHP 中,我从 mySQL 编码了一个 JSON 数组,如何使用它?解码?

php - 如何使用PHP在同一页面显示检索到的数据

php - 在 Android 中使用 PHP 将数据作为 JsonArray 发送到 MySQL 的教程

OSX Sierra 上的 MySQL 无法启动 : The server quit without updating PID file