MySQL出现Waiting for table metadata lock的原因方法
来源:脚本之家
时间:2023-01-07 12:14:19 207浏览 收藏
对于一个数据库开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《MySQL出现Waiting for table metadata lock的原因方法》,主要介绍了for、TABLE、MySQLWaiting、metadata、lock,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!
MySQL在进行alter table等DDL操作时,有时会出现Waiting for table metadata lock的等待场景。而且,一旦alter table TableA的操作停滞在Waiting for table metadata lock的状态,后续对TableA的任何操作(包括读)都无法进行,因为他们也会在Opening tables的阶段进入到Waiting for table metadata lock的锁等待队列。如果是产品环境的核心表出现了这样的锁等待队列,就会造成灾难性的后果。
造成alter table产生Waiting for table metadata lock的原因其实很简单,一般是以下几个简单的场景:
场景一:长事物运行,阻塞DDL,继而阻塞所有同表的后续操作
通过show processlist可以看到TableA上有正在进行的操作(包括读),此时alter table语句无法获取到metadata 独占锁,会进行等待。
这是最基本的一种情形,这个和mysql 5.6中的online ddl并不冲突。一般alter table的操作过程中(见下图),在after create步骤会获取metadata 独占锁,当进行到altering table的过程时(通常是最花时间的步骤),对该表的读写都可以正常进行,这就是online ddl的表现,并不会像之前在整个alter table过程中阻塞写入。(当然,也并不是所有类型的alter操作都能online的,具体可以参见官方手册:http://dev.mysql.com/doc/refman/5.6/en/innodb-create-index-overview.html)
处理方法: kill 掉 DDL所在的session.
场景二:未提交事物,阻塞DDL,继而阻塞所有同表的后续操作
通过show processlist看不到TableA上有任何操作,但实际上存在有未提交的事务,可以在 information_schema.innodb_trx中查看到。在事务没有完成之前,TableA上的锁不会释放,alter table同样获取不到metadata的独占锁。
处理方法:通过 select * from information_schema.innodb_trx\G, 找到未提交事物的sid, 然后 kill 掉,让其回滚。
场景三:
通过show processlist看不到TableA上有任何操作,在information_schema.innodb_trx中也没有任何进行中的事务。这很可能是因为在一个显式的事务中,对TableA进行了一个失败的操作(比如查询了一个不存在的字段),这时事务没有开始,但是失败语句获取到的锁依然有效,没有释放。从performance_schema.events_statements_current表中可以查到失败的语句。
官方手册上对此的说明如下:
If the server acquires metadata locks for a statement that is syntactically valid but fails during execution, it does not release the locks early. Lock release is still deferred to the end of the transaction because the failed statement is written to the binary log and the locks protect log consistency.
也就是说除了语法错误,其他错误语句获取到的锁在这个事务提交或回滚之前,仍然不会释放掉。because the failed statement is written to the binary log and the locks protect log consistency 但是解释这一行为的原因很难理解,因为错误的语句根本不会被记录到二进制日志。
处理方法:通过performance_schema.events_statements_current找到其sid, kill 掉该session. 也可以 kill 掉DDL所在的session.
总之,alter table的语句是很危险的(其实他的危险其实是未提交事物或者长事务导致的),在操作之前最好确认对要操作的表没有任何进行中的操作、没有未提交事务、也没有显式事务中的报错语句。如果有alter table的维护任务,在无人监管的时候运行,最好通过lock_wait_timeout设置好超时时间,避免长时间的metedata锁等待。
终于介绍完啦!小伙伴们,这篇关于《MySQL出现Waiting for table metadata lock的原因方法》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布数据库相关知识,快来关注吧!
-
352 收藏
-
471 收藏
-
350 收藏
-
272 收藏
-
251 收藏
-
136 收藏
-
187 收藏
-
381 收藏
-
211 收藏
-
164 收藏
-
175 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 507次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 484次学习
-
- 贪玩的唇膏
- 很有用,一直没懂这个问题,但其实工作中常常有遇到...不过今天到这,帮助很大,总算是懂了,感谢楼主分享技术文章!
- 2023-04-15 07:32:38
-
- 威武的春天
- 写的不错,一直没懂这个问题,但其实工作中常常有遇到...不过今天到这,帮助很大,总算是懂了,感谢作者分享文章!
- 2023-03-24 12:10:59
-
- 疯狂的乌龟
- 这篇技术贴出现的刚刚好,太细致了,写的不错,mark,关注老哥了!希望老哥能多写数据库相关的文章。
- 2023-03-14 16:10:19
-
- 光亮的老鼠
- 太详细了,码住,感谢师傅的这篇技术文章,我会继续支持!
- 2023-03-03 19:47:18
-
- 欢喜的导师
- 这篇博文太及时了,老哥加油!
- 2023-03-02 23:10:44
-
- 着急的篮球
- 这篇文章内容真及时,太细致了,真优秀,收藏了,关注老哥了!希望老哥能多写数据库相关的文章。
- 2023-02-08 10:39:32
-
- 鳗鱼草丛
- 好细啊,已加入收藏夹了,感谢老哥的这篇技术贴,我会继续支持!
- 2023-01-31 19:16:23
-
- 不安的溪流
- 这篇文章出现的刚刚好,大佬加油!
- 2023-01-28 04:00:23
-
- 暴躁的含羞草
- 太细致了,已加入收藏夹了,感谢作者大大的这篇文章内容,我会继续支持!
- 2023-01-22 16:50:12
-
- 单身的路灯
- 这篇技术贴出现的刚刚好,细节满满,很有用,已收藏,关注作者大大了!希望作者大大能多写数据库相关的文章。
- 2023-01-22 07:17:49
-
- 活力的小懒猪
- 这篇博文出现的刚刚好,楼主加油!
- 2023-01-22 05:57:01
-
- 妩媚的帆布鞋
- 这篇文章真及时,太细致了,赞 👍👍,mark,关注作者大大了!希望作者大大能多写数据库相关的文章。
- 2023-01-22 02:26:14
-
- 尊敬的秋天
- 很好,一直没懂这个问题,但其实工作中常常有遇到...不过今天到这,帮助很大,总算是懂了,感谢博主分享文章!
- 2023-01-19 10:28:10
-
- 风中的往事
- 这篇文章太及时了,太全面了,写的不错,收藏了,关注楼主了!希望楼主能多写数据库相关的文章。
- 2023-01-14 01:27:13