mysql在线DDL(与oracle的区别)

对mysql有所研究的都知道,当mysql某个业务表上有未提交的活动事务的时候,你去执行在线DDL,这相当危险,直接会被卡住,show processlist里面会显示这个DDL遇到了MDL锁等待,即“waiting for table metadata lock",此时如果你去喝咖啡去了。。。杯具就发生了,因为此时这个业务表连select都会被阻塞。

 

mysql在5.6官方文档里面说自己可以支持大部分在线DDL了,包括常见的加字段、加索引、改字段等等。但是要注意:这里所谓的支持在线DDL,指的是针对死表(执行DDL前表上没有未提交的事务)的情况,即在mysql5.6里对死表执行DDL的时候,不会出现mysql5.5的”copy to tmp table"的情况,只是提示“altering table",在DDL执行期间不会像mysql5.5一样阻塞这个表上的DML。

 

但是生产系统的繁忙业务表,肯定是活表(表上每时每刻都有未提交的事务),所以在上面搞在线DDL则是另外的话题了,这里不详细解释。

 

但是有一点,mysql没有oracle做得好,mysql一些危险的sql,在执行的时候,会直接卡住,没有任何提示,很不友好,如下:

wKioL1cHlMOSNkXYAAAX6INuuk0612.png

 

oracle,在一个有活动事务的表上执行DDL的时候,oracle会报

“ORA-00054: resourcebusy and acquire with NOWAIT specified”,这种提示就非常友好了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值