mysql ddl分类_MySQL online ddl 你了解多少?

????我们之前介绍过Percona出品的pt-online-schema-change工具 它可以实现在线的DDL 其实MySQL在5.6版本中也加入了online DDL的功能 但是由于当时功能的不健 导致DBA们再使用时非常谨慎 甚

????我们之前介绍过Percona出品的pt-online-schema-change工具,它可以实现在线的DDL,其实MySQL在5.6版本中也加入了online DDL的功能,但是由于当时功能的不健,导致DBA们再使用时非常谨慎,甚至直接放弃了MySQL自带的在线变更功能,随着MySQL5.7的不断优化以及8.0的问世,MySQL自带的online DDL也是越发的完善和稳定,今天我们就一起来了解下。

ALGORITHM

MySQL online DDL的语法举例,比如我们想新增一个主键:

ALTER TABLE tbl_name ADD PRIMARY KEY (column), ALGORITHM=INPLACE, LOCK=NONE;

其中ALGORITHM有三种算法,分别是copy,inplace,instant。

copy:当MySQL选用这种算法时,整个操作是offline的,在DDL执行期间会阻塞其他DML语句,期间会生产临时表,将原表中的数据拷贝至新表中。

inplace:所有的操作都是在innodb引擎层完成,不需要经过临时表。除了创建fulltext索引和spatial索引外,其他场景都是允许DML并行操作的。该算法又根据是否重建表分为rebuild和no-rebuild。

rebuild涉及表的重建,会在原表路径下生成新的.frm和.ibd文件,同时申请row log空间记录DDL执行期间的DML操作记录,最后再DDL提交阶段重做row log中的内容。

no-rebuild不涉及表的重建,除了创建添加索引会产生二级索引的写入操作外,其余操作只修改元数据信息,不会生成.ibd文件,并且不会申请row log空间,这种场景消耗IO较少,速度较快。

instant:该特性是MySQL8.0.12引入,只修改数据字典的元数据信息,无需拷贝数据也无需重建表,原表数据不受影响。整个DDL过程执行非常快,不会阻塞DML操作。

注意:

在执行DDL操作时,一般不需要我们指定ALGORITHM,MySQL内部会自行判断应该采用哪种方式进行变更。

对于涉及rebuild表的操作,需要关注下原表所在磁盘的使用情况。

对于申请row log空间的操作,需要关注innodb_online_alter_log_max_size的值,该值默认128M,代表row log的最大值,支持动态修改。空间每次申请的大小由innodb_sort_buffer_size决定。

对于24小时业务表,如果你不确定该操作会不会影响线上业务,建议使用pt-osc工具执行变更。

DDL操作场景分类

????前面讲了online ddl的各种算法,由于并不是所有的操作是online的,需要我们加以区分,针对不同的操作MySQL内部会采用哪种模式进行变更,我进行了分类总结,希望能帮助到你!?

89df33d99a1fa42ac22618673da0519d.png

以上信息来源于网络,如有侵权,请联系站长删除。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值