mysql online ddl和pt_MySQL的onlineDDL及pt-osc

MySQL执行在线变更表结构,是MySQLDBA运维的一个重要日常,该文章讨论了如何对一个大表进行结构变更时保证数据库服务的稳定性。

1、首先看MySQL的onlineDDL.对字段的操作,官方文档中有如下说明

增加、删除及重排一个column时,虽然可以使用in place方法,使再执行onlineDDL时不会阻塞对表的更新。但是在集群(主从复制、组复制)中,该DDL的在其他节点的执行将会阻塞后续的事务,造成后续事务的延时。对二级索引的操作,官方文档中如下

在MySQL5.7中可以做到在增加二级索引(除了全文索引)是不阻塞当前节点的写入,但是与对column的操作相同在集群(主从复制、组复制)中,该DDL的在其他节点的执行将会阻塞后续的事务,造成事务的延时。对主键的操作

在MySQL5.7中对主键进操作是是否可以用in place方法,及是否可以并发执行DML如上,一般不会出现对主键增减的问题,因为建表时已经确定好主键。MySQL8.0已经可以做到秒及加列。

2、再看percona的开源工具pt-osc(pt-online-schema-change)工作原理

在原表中创建触发器,将执行pt-osc过程中的更改同步到中间表;

创建中间表,并更改中间表的表结构;

批量拷贝数据库到中间表;

将原表重命名,将中间表重名,将原表删除。使用过程产生死锁导致线上业务失败。

在频繁更新的表上做pt-osc可能产出大量死锁,所以执行pt-osc时尽量避免业务的高峰期,一方面可以避免死锁的产生,另一方面在执行pt-osc时会消耗较大的IO,避免对线上整体业务的影响。导致主从延时

该问题可以通过pt-osc的流控来控制。

pt-osc在进行数据拷贝时会给数据库上产生较大负载,一般建议在业务低估期执行。大量的数据拷贝可能导致集群(主从复制,组复制)中的其他节点延时。

1)对于主从复制模式下,pt-osc可以监控从节点延时,当延时超过某值时,暂停数据库拷贝,待延时降低后继续拷贝。

2)对于MGR架构情况下,增加sleep=0.3,chunk-time=0.2;及每次拷贝数据控制在0.2秒完成,在拷贝下一批数据前暂停0.3秒。通过这两个参数分别降低的拷贝数据的事务大小及writeset中已经过期的值大小,避免大事务及每60秒清理writeset时造成的事务阻塞。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值