OMS对上亿行数大表迁移如何提升效率





3 个赞

这样来看单表确实没有好的办法,目前迁移了多少数据量。。计算下还要多久的时间,是否能接受吧 :sweat_smile:

3 个赞

背景是3版本迁移到4版本并且做分区表改造,3版本数据库数据量单副本100G左右,1亿行的那张大表就90多G了,目前优化的方式是临时提升源端和目标端的CPU配置,提高并发能力,目前迁移速度在3-4小时左右

3 个赞

3-4个小时应该也还好,3.x源端那边如果是分区的话其实速度也应该能快很多

2 个赞

再请教两个问题,一个是上面的增量拉取组件的延迟该怎么处理呢?
另一个是在全量校验过程中有几个表报错运行异常


这个情况有什么处理方式吗?

1 个赞

是和表无主键有关吗?

第二个问题找到了:对于无主键表,现在 OMS 不支持增量同步以及数据校验,所以如果要同步的表包括主键表+无主键表,那么后续增量同步任务,需要将无主键表剔除掉,或者保证无主键表没有变更。
MySQL 迁移到 OB-数据库技术博客-OceanBase分布式数据库

1 个赞

1、调整ob租户内存大小和调整oms jvm 大小
2、通过分区表 批量迁移,我记得oms或者datax 可以 单独对分区表迁移
3、冷热数据分割,热数据通过oms迁移;冷数据 dump ,datax,flink cdc 都可以 ,方法很多。

2 个赞

你oms什么版本的 ,我记得4.2.2 以后 都支持无主键表迁移了。

1 个赞

增量延迟大概在多久。。我实测的经验在二三十秒都算正常,如果超过这个时间需要确定的源端日志是否有写入,源端写入不频繁的话超过这个时间也算正常

1 个赞

好的,估计可能因为测试环境周六日没啥写入操作。

1 个赞

4.2.1版本

1 个赞

全量迁移的时候可以参考下面参加提高源和目标batch的大小提高性能,生产环境谨慎调节

“limitator.image.insert.batch.max”:

string"100"

“limitator.platform.threads.number”:

string"4"

“limitator.reviewer.period”:

string"3"

“limitator.reviewer.review.batch.max”:

string"100"

“limitator.reviewer.rounds.max”:

string"20"

“limitator.reviewer.time.max”:

string"60"

“limitator.select.batch.max”:

string"200"

“limitator.table.diff.max”:

string"10000"

“mapper.from_master_to_image.list”:

string"silvans;;=datasync;;"

“rectifier.image.enable”:

string"false"

“rectifier.image.operator.delete”:

string"false"

“rectifier.image.operator.insert”:

string"false"

“rectifier.image.operator.update”:

string"false"

“sampler.verify.ratio”:

string"100"

“task.checker_jvm_param”:

string"-server -Xms4g -Xmx4g -Xmn2g -Xss512k"

可以参考看下ob博客,有些优化的方法
如何加快OMS大表迁移-数据库技术博客-OceanBase分布式数据库
Oracle 到OceanBase 数据迁移OMS最佳实践-数据库技术博客-OceanBase分布式数据库

你那源端切片时间那么长明显是有问题的,我们10几亿的表rps都在7-8w左右,你源端视乎有瓶颈了
看一下切片的优化 如何加快OMS大表迁移-数据库技术博客-OceanBase分布式数据库

这一部分是检验相关的参数吧

就是全量迁移的时候,可以点击那个任务先暂停,然后点击更新,里面有参数 你可以看看
调节batch肯定可以提高性能,但是源端要慢慢调,别影响生产环境哈

可以根据这份文档进行排查和优化
https://www.oceanbase.com/docs/community-oms-cn-1000000001047352

需要源端和目标端pk或者not null uk有一个匹配上才能校验

升级oms 版本吧,4.2.2 支持无主健同步了