MySQL online ddl 你了解多少?

网友投稿 959 2022-10-29

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

MySQL online ddl 你了解多少?

我们之前介绍过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内部会采用哪种模式进行变更,我进行了分类总结,希望能帮助到你!

上一篇:电子文档安全管理系统作为中国石化信息安全基础设施
下一篇:电子文档安全管理系统
相关文章

 发表评论

暂时没有评论,来抢沙发吧~