开发者社区> 问答> 正文

遇到表元数据锁等待-“Waiting for table metadata lock”

问题描述:
经常有客户遇到表元数据锁的等待Waiting for table metadata lock情况
如下图:

解决过程:
1、通过show processlist看不到Table上有任何操作,但实际上存在有未提交的事务,可以在information_schema.innodb_trx中查看到。在事务没有完成之前,Table上的锁不会释放,其他语句获取不到metadata的独占锁。

2、通过上图,可以查看到占用元数据锁的事务ID,获取了这个事务ID后,就可以和showprocesslist 命令(图一)内的PID对应上具体的session了

3 、定位到具体的锁线程后,问题基本上就迎刃而解了,本例中是一个 sleep 的查询线程,该线程存在未提交的事务导致长期霸占元数据锁,清理掉该线程后,其他 session 就能正常的执行下去了。

关于 Waiting for metadata locking 的出现情景有很多
通常情况下,可以通过show processlist可以看到Table上有正在进行的操作(包括读),此时alter table语句无法获取到metadata 独占锁,会进行等待
另外,如本案例中描述的,通过show processlist看不到Table上有任何操作,但实际上存在有未提交的事务,可以在information_schema.innodb_trx中查看到。
PS:手工的分析排查可能会增加时间和运维成本, RDS运维管理工具DMS已经提供了Innodb锁等待的自动化分析功能
DMS = 》实例信息 = InnoDB 锁等待 查看并终止这些会话。


展开
收起
洛欢 2015-08-17 14:36:28 10706 0
2 条回答
写回答
取消 提交回答
  • 一个程序员,欢迎骚扰!!!
    表元数据库 专业名词
    2015-08-18 08:42:35
    赞同 展开评论 打赏
  • 解决方案工程师,负责为企业规划上云迁移方案和云上架构设计,在网站建设开发和云计算领域有多年经验,专注于Linux平台的系统维护以及应用部署。致力于以场景化的方式让云计算,用更加通俗易懂的方式让更多人体验云计算,让云端的计算更质朴的落地。
    买RDS还有专门的数据库服务,真棒~~
    2015-08-17 14:41:26
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载