如何识别并解决MySQL'等待表元数据锁”?

Patricia Arquette
发布: 2024-10-31 12:54:30
原创
704 人浏览过

How to Identify and Resolve

MySQL 中“等待表元数据锁定”状态的故障排除

对表执行 DDL 操作有时会导致“等待表”检查 SHOW PROCESSLIST 时出现“元数据锁定”消息。这表明另一个事务尚未关闭并持有表上的锁,从而阻止修改。

识别阻塞事务

确定哪个事务导致这种状态下,可以采用以下方法:

1. SHOW ENGINE INNODB STATUS

(对于 MySQL 版本

执行 SHOW ENGINE INNODB STATUS G 显示有关 InnoDB 内部的详细信息,包括 TRANSACTIONS 部分。这将列出活跃交易及其状态。

2. INFORMATION_SCHEMA 表

INFORMATION_SCHEMA 中的 INNODB_LOCK_WAITS 表包含有关等待锁的事务的信息。要检查所有此类事务,请使用:

<code class="sql">SELECT * FROM INNODB_LOCK_WAITS;</code>
登录后复制

要识别阻塞事务,请执行:

<code class="sql">SELECT * FROM INNODB_LOCKS WHERE LOCK_TRX_ID IN (SELECT BLOCKING_TRX_ID FROM INNODB_LOCK_WAITS);</code>
登录后复制

或者:

<code class="sql">SELECT INNODB_LOCKS.* 
FROM INNODB_LOCKS
JOIN INNODB_LOCK_WAITS ON (INNODB_LOCKS.LOCK_TRX_ID = INNODB_LOCK_WAITS.BLOCKING_TRX_ID);</code>
登录后复制

要检查特定上的锁定表:

<code class="sql">SELECT * FROM INNODB_LOCKS WHERE LOCK_TABLE = db_name.table_name;</code>
登录后复制

列出等待锁的事务:

<code class="sql">SELECT TRX_ID, TRX_REQUESTED_LOCK_ID, TRX_MYSQL_THREAD_ID, TRX_QUERY
FROM INNODB_TRX
WHERE TRX_STATE = 'LOCK WAIT';</code>
登录后复制

其他资源

请参阅 MySQL 故障排除指南,第 6 章,第 96 页,进一步了解如何解决此问题。

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!