mysql online ddl和pt_MySQL 8.0 Online DDL和pt-osc、gh-ost深度对比分析

本文基于MySQL 8.0测试常用的DDL工具,通过多个维度进行对比分析。基本结论是MySQL原生Online DDL在性能、存储开销和易用性等方面有较大优势,目前在加列等场景可取代pt-osc/gh-ost,在创建索引等场景还需要做进一步优化。

DDL工具实现分析

在MySQL使用过程中,根据业务的需求对表结构进行变更是个普遍的运维操作,这些称为DDL操作。常见的DDL操作有在表上增加新列,或给某个列添加索引。

目前可用的DDL操作工具包括pt-osc,github的gh-ost,以及MySQL提供的在线修改表结构命令Online DDL。pt-osc和gh-ost均采用拷表方式实现,即创建个空的新表,通过select+insert将旧表中的记录逐次读取并插入到新表中,不同之处在于处理DDL期间业务对表的DML操作(增删改)。

pt-osc

pt-osc是Percona运维工具包中提供的表结构变更工具,全称pt-online-schema-change。执行流程图如下:

从中可知其采用触发器来应用DDL执行期间对表所做的DML操作,每种DML操作均对应一个触发器,如下所示:

CREATE TRIGGER `pt_osc_sbtest_sbtest2_del` AFTER DELETE ON `sbtest`.`sbtest2` FOR EACH ROW DELETE IGNORE FROM `sbtest`.`_sbtest2_new` WHERE `sbtest`.`_sbtest2_new`.`id` <=> OLD.`id`

CREATE TRIGGER `pt_osc_sbtest_sbtest2_upd` AFTER UPDATE ON `sbtest`.`sbtest2` FOR EACH ROW REPLACE INTO `sbtest`.`_sbtest2_new` (`id`, `k`, `c`, `pad`, `ptosc`) VALUES (NEW.`id`, NEW.`k`, NEW.`c`, NEW.`pad`, NEW.`ptosc`)

CREATE TRIGGER `pt_osc_sbtest_sbtest2_ins` AFTER INSERT ON `sbtest`.`sbtest2` FOR EACH ROW REPLACE INTO `sbtest`.`_sbtest2_new` (`id`, `k`, `c`, `pad`, `ptosc`) VALUES (NEW.`id`, NEW.`k`, NEW.`c`, NEW.`pad`, NEW.`ptosc`)

根据定义可知,delete变为delete ignore,update和insert均转换为replace into。

pt-osc同时处理全量和增量数据,即一边拷表一边回放增量DML,其所用拷表语句如下:

INSERT LOW_PRIORITY IGNORE INTO `sbtest`.`_sbtest2_new` (`id`, `k`, `c`, `pad`, `ptosc`) SELECT `id`, `k`, `c`, `pad`, `ptosc` FROM `sbtest`.`sbtest2` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= ?)) AND ((`id` <= ?)) LOCK IN SHARE MODE /*pt-online-schema-change 115039 copy nibble*/

SELECT /*!40001 SQL_NO_CACHE */ `id` FROM `sbtest`.`sbtest2` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= ?)) ORDER BY `id` LIMIT ?, 2 /*next chunk boundary*/

由于采用触发器方式&

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值