最近有几项业务下线,需要从一张表中删除6.8亿多条数据。想办法把数据删除掉了,但对应的ogg灾备端复制时有了的延迟,而且延迟的时间起来越长。
对于表太多造成的延迟可以把所有表分为多个组来做复制,于是想复制进程是否可以对单表复制开并行。上网查到了相关的资料,可以使用@RANGE函数对单表作表内的拆分,通过对表上主键列作hash算法将该表上发生的变更均分到多个replicat上来降低单个replicat组件的负载。
动手实验一下:
ogg搭建过程不再重复,从网上就可以查到。
实验过程:模拟在源端对表scott.emp1做大量的dml操作,复制进程出现延迟,在目标端对复制表scott.emp1开并行3个进程。
源端插入数据:
目标端有延迟
停掉复制进程
拆分复制进程,对表scott.emp1分三个进程复制
#源复制进程
源进程修改为
map scott.emp1, target scott.emp1 ,FILTER(@RANGE(1,3));
多复制出两个参数文件:
添加两个复制进程,extseqno和extrba与源进程一致
启动复制进程
查看数据库里ogg对应的会话
可以看到出现了三个会话,都是对应的对表scott.emp1的插入语句。也就是说实现了对scott.emp1表的并行复制。
MOS上也有相关的文档介绍相应的功能,文档:1320133.1和1512633.1

|