MySQLWaiting for table metadata lock的解决方法

MySQLWaiting for table metadata lock的解决方法,第1张

概述最近需要在某一个表中新增字段,使用Sequel Pro 或者Navicat工具都会出现程序没有反应,使用 show processlist 查看,满屏都是 Waiting

最近需要在某一个表中新增字段,使用Sequel Pro 或者Navicat工具都会出现程序没有反应,使用 show processList 查看,满屏都是 Waiting for table Metadata lock 状态的连接,第一反应当然是 kill 掉这些链接,但是假如太多怎么办?遂在找寻其他办法。

在网上查询得知MysqL在进行一些alter table等DDL *** 作时,如果该表上有未提交的事务则会出现 Waiting for table Metadata lock ,而一旦出现Metadata lock,该表上的后续 *** 作都会被阻塞(http://www.bubuko.com/infodetail-1151112.html)。所以这个问题需从两方面解决:

1. 查看未提交事务


从 information_schema.innodb_trx 表中查看当前未提交的事务

select trx_state,trx_started,trx_MysqL_thread_ID,trx_query from information_schema.innodb_trx;

字段意义:

trx_state: 事务状态,一般为RUNNINGtrx_started: 事务执行的起始时间,若时间较长,则要分析该事务是否合理trx_MysqL_thread_ID: MysqL的线程ID,用于killtrx_query: 事务中的sql

一般只要kill掉这些线程,DDL *** 作就不会Waiting for table Metadata lock。

2. 调整锁超时阈值
lock_wait_timeout 表示获取Metadata lock的超时(单位秒),允许的值范围为1到31536000(1年)。 默认值为31536000 (1年)。官方解释:https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_lock_wait_timeout 。

修改等待时间:

set session lock_wait_timeout = 1800;set global lock_wait_timeout = 1800;

经过以上 *** 作,我司的数据库暂时还未出现情况,有相同经历的不妨试一试,如果有更好的解决方案,欢迎留言!!

总结

以上是内存溢出为你收集整理的MySQL Waiting for table metadata lock的解决方法全部内容,希望文章能够帮你解决MySQL Waiting for table metadata lock的解决方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1151512.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存