Mysql5.6版本新增列,执行DDL的时候竟然锁表了,这应该是是最好的解决办法之一了!!

背景

业务需求需要在数据库表新赠一个字段,执行DDL且在不停服的情况下。

实际操作

第一次提交SQL

alter table
  tibtc23
add
  `red_flag` varchar(2) DEFAULT '0' COMMENT '红冲状态(1-已红冲,0-未红冲)';
  1. 预测有效行数有700多万,DBA刚开始执行的时候,说还有用户使用会产生原数据锁,最后会引起锁表,于是推迟到11.多。

第二次提交

  1. 第二次执行的时候已经11.多,用户量很少(偏Tob),但是DBA执行中,反馈是我们有业务的SQL有问题,然后看了具体SQL后,才知道原来是有几个定时任务定时在数据库查询的语句(比较频繁的查询)。导致执行过程中执行失败
    在这里插入图片描述

  2. 于是再次确定了mysql的version,想到了online DDL的几个语法。直接声明让他们在执行的过程中不进行锁表(此处的新增列必须不是自增的,不然语法会erro)。(官方地址:https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html)
    在这里插入图片描述

alter table
  tibtc23
add
  `red_flag` varchar(2) DEFAULT '0' COMMENT '******', ALGORITHM=INPLACE, LOCK=NONE;
  1. 再次提交SQL之后 通过show processlist查看了sql进程以及描述,虽然有sleep但是是没有metadatalock的描述的。最后顺利执行完成。这也算是一次线上测试(毕竟是官方给的,还是很靠谱的)。但是DBA说是会在特殊情况下才有可能缓解缩表的情况。(后续再测试测试)
    在这里插入图片描述

总结

在新增列的时候,数据量大的时候,使用ALGORITHM=INPLACE, LOCK=NONE语法。
大家可以再深入理解一下 onlineDDL
官方文档: https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值