MySQL Online DDL导致全局锁表案例分析

我这边遇到了什么问题?

线上给某个表执行新增索引SQL, 然后整个数据CPU打到100%, 连接数暴增到极限, 最后导致所有访问数据库的应用都奔溃.

SQL如下:

ALTER TABLE `book`

ADD INDEX `idx_sub_title` (`sub_title` ASC);

能看到什么?

'10063293', 'root', '10.0.0.1:35252', 'novel', 'Query', '50', 'Waiting for table metadata lock',

'ALTER TABLE `lemon_novel`.`book` \nADD INDEX `idx_sub_title` (`sub_title` ASC)'

'10094494', 'root', '172.16.2.112:42808', 'novel', 'Query', '31', 'Waiting for table metadata lock', 'SELECT \n

book_trend.book_id AS book_id,

很奇怪, 这两边都在等"Waiting for table metadata lock"

反手查一下"Waiting for table metadata lock"是什么

初步的一些结论

看下来下面的一些结论:MySQL 5.6以后的版本,支持在线DDL,新增index/删除index之类的可以直接InPlace操作,不需要rebuild整张表,理论上效果是很快的,详细资料见Online DDL Operations

DDL add index 操作会lock table metadata,此操作是导致我们服务不可用的原因

有怀疑过lock tabel matadata和MySQL autocommit有关,但是实践下来两者看起来没有关联。

后来在阿里云上面还看到过他们特定写过类似的答疑.

阿里云建议主要是这样操作.这里需要找到的是一直在占用该表的会话,而不是正在等待MDL锁解除的会话,注意区分。可以根据State列的状态和Info列的命令内容来进行分析判断。

您也可以用如下命令查询长时间未完成的事务,如果导致阻塞的语句的用户与当前用户不同,请使用导致阻塞的语句的用户登录来终止会话。

select concat('kill ',i.trx_mysql_thread_id,';') from information_schema.innodb_trx i,

(select

id, time

from

information_schema.processlist

where

time = (select

max(time)

from

information_schema.processlist

where

state = 'Waiting for table metadata lock'

and substring(info, 1, 5) in ('alter' , 'optim', 'repai', 'lock ', 'drop ', 'creat'))) p

where timestampdiff(second, i.trx_started, now()) > p.time

and i.trx_mysql_thread_id not in (connection_id(),p.id);

然而在我的场景, 上面的SQL并没有任何的进程输出.

陷入僵局的...

不过上面给了一些思路, 现在我们主要是因为有东西占用着 table metadata lock, 导致当前所有的东西都没有执行.

showfull processlist;

看一眼没什么卵用, 处理那两个奇怪的wait lock, 其他的都挺正常的.

那么, 看下现在谁占用着锁? 怎么看呢?

select*from information_schema.innodb_trx;

神奇了, 真有两个东西在占用锁.

那kill 了他们看看.

额, 解决了.

最终结论

某个奇怪的程序开了查询或者奇怪的操作,lock了 table metadata,

之后连接一直都没有被释放, 导致以上各种问题.

现在的问题来了, 究竟是哪个程序或者哪个代码导致的呢?

抱歉, 我现在也还不知道...

理论上可以查,

但是上次去查的时候发现数据库显示的host对应机器的端口早就没东西了,

死无对证ing.

最后建议online DDL前,最好确认一下当前数据库有没有类似table metadata lock存在

最好的方案还是主从切换来搞

全文完.

mysql ddl 锁_MySQL Online DDL导致全局锁表案例分析相关推荐

  1. mysql行锁索引问题_Mysql锁机制--索引失效导致行锁变表锁

    =============== Tips:在阅读本文前,最好先阅读 这篇(Mysql锁机制--行锁)文章~ 在上篇文章中,我们看到InnoDB默认的行锁可以使得操作不同行时不会产生相互影响.不会阻塞, ...

  2. mysql设置乐观锁_mysql数据库怎么设置乐观锁

    乐观锁与悲观锁不同的是,它是一种逻辑上的锁,而不需要数据库提供锁机制来支持当数据很重要, 回滚或重试一次需要很大的开销时,需要保证操作的ACID性质, 此时应该采用悲观锁而当数据对即时的一致性要求不高 ...

  3. mysql limit优化_MySQL:教你学会如何做性能分析与查询优化

    点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 作者:mikevictor cnblogs.com/mikevictor07/p/7275 ...

  4. Synchronized代码块锁的是什么?全局锁?对象锁?

    对象锁:锁的是这个对象. 全局锁:锁的是那个写了synchronized关键字的方法或者代码块. 这里主要去聊全局锁 当java关键字 Synchronized()代码块锁随便的一个类比如,Integ ...

  5. mysql frm 恢复_mysql 从 frm 文件恢复 table 表结构的3种方法

    mysql 正常运行的时候,查看 table 的结构并不是困难的事. 但是有时 mysql 发生故障,这种方法便不再可行. 当遇到故障,通常使用新的 mysql 实例来恢复当前的数据. 建表是非常重要 ...

  6. 内存回收导致关键业务抖动案例分析-论云原生OS内存QoS保障

    蒋彪,腾讯云高级工程师,10+年专注于操作系统相关技术,Linux内核资深发烧友.目前负责腾讯云原生OS的研发,以及OS/虚拟化的性能优化工作. ## 导语 云原生场景,相比于传统的IDC场景,业务更 ...

  7. mysql ddl脚本_MySQL在线DDL gh-ost使用总结

    背景: 作为一个DBA,大表的DDL的变更大部分都是使用Percona的pt-online-schema-change,本文说明下另一种工具gh-ost的使用:不依赖于触发器,是因为他是通过模拟从库, ...

  8. mysql gh 划线_MySQL在线DDL gh-ost 使用说明

    3)使用说明:条件是操作的MySQL上需要的binlog模式是ROW.如果在一个从上测试也必须是ROW模式,还要开启log_slave_updates.根据上面的参数说明按照需求进行调整. 环境:主库 ...

  9. mysql查看ddl语句_mysql语句-DDL语句

    SQL分类 1.DDL语句:数据定义语句,用来定义不同的数据段.数据库,表,列,索引等数据表对象,常用语句:create.drop.alter等. 2.DML语句:数据操作语句,用于添加.删除.更新和 ...

最新文章

  1. 《1---关于解决MySQL在控制台插入中文乱码问题》
  2. div在最顶层显示----弹出框效果
  3. js的arguments_javascript
  4. Asp.Net Core异常处理整理
  5. 程序员初试和复试_程序员因肌肉发达面试被质疑能力,网友:这做程序员有啥关系呢?...
  6. windows删除桌面ie_从Windows 8“开始”屏幕启动IE的桌面版本
  7. 山寨“饿了么”应用中添加菜品数量按钮效果
  8. machine learning for hacker记录(3) 贝叶斯分类器
  9. 9206 课堂笔记 综合演练 添加数据与非空验证
  10. Springboot-实现热部署
  11. alsa的动态库安装在哪里_linux 给运行程序指定动态库路径
  12. 江西省普通高考2021艺术楼统考成绩查询,统考成绩查询
  13. AI 改写《权力的游戏》结局,和编剧比谁更烂?
  14. php求add函数,PHP函数每日一贴之字符串函数-addcslashes()函数
  15. UEFI中的Protocol
  16. 登录页面加密token和盐的作用
  17. swift学习之数组、字典和字符串
  18. 《文明之光》第六章读书笔记
  19. 资源网站模板Emlog程序zytheme模板
  20. 向毕业妥协系列之深度学习笔记(三)DL的实用层面(上)

热门文章

  1. html-页面结构分析
  2. 运营商服务器系统,浪潮服务器助力运营商三大支撑系统上云
  3. android 各版本市占率,Android各版本市占率:果冻豆遥遥领先
  4. c++如何显示图片_Vue+laravel后端添加商品后图片如何显示?
  5. php网页执行流程,PHP程序的执行流程
  6. 怎么将sql语句转化成语法树_数据库如何解析执行SQL
  7. html5 判断分享,好程序员HTML5大前端分享之函数篇
  8. 防止头文件重复包含之pragma once与#ifndef
  9. php keep user login,php5.4安装dedecms登录后台空白解决办法(session_register函数已废弃)...
  10. 计算机能力提升研修总结ppt,信息技术能力提升研修总结