12. Setting up a GoldenGate replication with multiple process groups

简单说明:

本实验实际上是将一个业务用户切分成两个抽取进程,每个抽取进程切分成两个甚至多个应用进程进行应用

清理《11. Setting up a simple GoldenGate replication confguration between two single node databases》
实验的环境,进行本章节的实验:

源端清理:

su - oracle
cd /ggs
./ggsci
DBLOGIN, USERID ggs PASSWORD ggs
stop *
DELETE EGGTEST1
DELETE PGGTEST1
exit
rm -rf /ggs/dirprm/EGGTEST1.prm
rm -rf /ggs/dirprm/PGGTEST1.prm
rm -rf /ggs/dirdat/st*
sqlplus / as sysdba
drop user scott cascade;
exit

目标端清理:

su - oracle
cd /ggs
./ggsci
DBLOGIN, USERID ggs PASSWORD ggs
stop *
delete RGGTEST1
DELETE CHECKPOINTTABLE ggs.rggtest1_ckpt !
-- 此处使用感叹号取消交互式确定
exit
rm -rf /ggs/dirprm/RGGTEST1.prm
rm -rf /ggs/dirdat/rt*
sqlplus / as sysdba
drop user scott cascade;
exit

源端和目标端均部署Oracle的样例数据库SCOTT,并打开表级附加日志:

su - oracle
sqlplus / as sysdba
@?/rdbms/admin/utlsampl.sql
cd /ggs
./ggsci
DBLOGIN USERID system PASSWORD oracle
ADD TRANDATA SCOTT.*
INFO TRANDATA SCOTT.*
exit

源端操作:

1° 源端配置两个抽取进程的配置文件:

su - oracle
cd /ggs/dirprm
cat >EGGTEST1.prm<<EOF
EXTRACT EGGTEST1
USERID ggs, PASSWORD ggs
EXTTRAIL /ggs/dirdat/EGGTEST1/st
TABLE SCOTT.BONUS,FILTER (@RANGE (1,2));
TABLE SCOTT.DEPT,FILTER (@RANGE (1,2));
TABLE SCOTT.EMP,FILTER (@RANGE (1,2));
TABLE SCOTT.SALGRADE,FILTER (@RANGE (1,2));
EOF
cat >EGGTEST2.prm<<EOF
EXTRACT EGGTEST2
USERID ggs, PASSWORD ggs
EXTTRAIL /ggs/dirdat/EGGTEST2/st
TABLE SCOTT.BONUS,FILTER (@RANGE (2,2));
TABLE SCOTT.DEPT,FILTER (@RANGE (2,2));
TABLE SCOTT.EMP,FILTER (@RANGE (2,2));
TABLE SCOTT.SALGRADE,FILTER (@RANGE (2,2));
EOF
# 创建配置文件中所需的目录
mkdir -v /ggs/dirdat/EGGTEST1
mkdir -v /ggs/dirdat/EGGTEST2

2° 源端配置两个发送进程的配置文件:

su - oracle
cd /ggs/dirprm
cat >PGGTEST1.prm<<EOF
EXTRACT PGGTEST1
USERID ggs, PASSWORD ggs
RMTHOST 192.168.77.11, MGRPORT 8809
RMTTRAIL /ggs/dirdat/PGGTEST1/rt
TABLE SCOTT.*;
EOF
cat >PGGTEST2.prm<<EOF
EXTRACT PGGTEST2
USERID ggs, PASSWORD ggs
RMTHOST 192.168.77.11, MGRPORT 8809
RMTTRAIL /ggs/dirdat/PGGTEST2/rt
TABLE SCOTT.*;
EOF
# 目标端创建配置文件中所需的目录
ssh 192.168.77.11 mkdir -v /ggs/dirdat/PGGTEST1
ssh 192.168.77.11 mkdir -v /ggs/dirdat/PGGTEST2

3° 源端配置俩抽取进程和俩发送进程:

su - oracle
cd /ggs
./ggsci
DBLOGIN USERID ggs PASSWORD ggs
ADD EXTRACT EGGTEST1, TRANLOG, BEGIN NOW
ADD EXTRACT EGGTEST2, TRANLOG, BEGIN NOW
ADD EXTTRAIL /ggs/dirdat/EGGTEST1/st, EXTRACT EGGTEST1
ADD EXTTRAIL /ggs/dirdat/EGGTEST2/st, EXTRACT EGGTEST2
ADD EXTRACT PGGTEST1, EXTTRAILSOURCE /ggs/dirdat/EGGTEST1/st
ADD EXTRACT PGGTEST2, EXTTRAILSOURCE /ggs/dirdat/EGGTEST2/st
ADD RMTTRAIL /ggs/dirdat/PGGTEST1/rt, EXTRACT PGGTEST1
ADD RMTTRAIL /ggs/dirdat/PGGTEST2/rt, EXTRACT PGGTEST2

目标端操作:

1° 目标端创建四个应用进程的配置文件
第一个和第二个是一套,第三个和第四个是一套
每套都对应一个发送进程:

su - oracle
cd /ggs/dirprm
cat >RGGTEST1.prm<<EOF
REPLICAT RGGTEST1
USERID ggs, PASSWORD ggs
DISCARDFILE /ggs/dirrpt/RGGTEST1.dsc,append,MEGABYTES 500
ASSUMETARGETDEFS
MAP SCOTT.BONUS, TARGET SCOTT.BONUS,FILTER (@RANGE (1,2));
MAP SCOTT.DEPT, TARGET SCOTT.DEPT,FILTER (@RANGE (1,2));
MAP SCOTT.EMP, TARGET SCOTT.EMP,FILTER (@RANGE (1,2));
MAP SCOTT.SALGRADE, TARGET SCOTT.SALGRADE,FILTER (@RANGE (1,2));
EOF
cat >RGGTEST2.prm<<EOF
REPLICAT RGGTEST2
USERID ggs, PASSWORD ggs
DISCARDFILE /ggs/dirrpt/RGGTEST2.dsc,append,MEGABYTES 500
ASSUMETARGETDEFS
MAP SCOTT.BONUS, TARGET SCOTT.BONUS,FILTER (@RANGE (2,2));
MAP SCOTT.DEPT, TARGET SCOTT.DEPT,FILTER (@RANGE (2,2));
MAP SCOTT.EMP, TARGET SCOTT.EMP,FILTER (@RANGE (2,2));
MAP SCOTT.SALGRADE, TARGET SCOTT.SALGRADE,FILTER (@RANGE (2,2));
EOF
cat >RGGTEST3.prm<<EOF
REPLICAT RGGTEST3
USERID ggs, PASSWORD ggs
DISCARDFILE /ggs/dirrpt/RGGTEST3.dsc,append,MEGABYTES 500
ASSUMETARGETDEFS
MAP SCOTT.BONUS, TARGET SCOTT.BONUS,FILTER (@RANGE (1,2));
MAP SCOTT.DEPT, TARGET SCOTT.DEPT,FILTER (@RANGE (1,2));
MAP SCOTT.EMP, TARGET SCOTT.EMP,FILTER (@RANGE (1,2));
MAP SCOTT.SALGRADE, TARGET SCOTT.SALGRADE,FILTER (@RANGE (1,2));
EOF
cat >RGGTEST4.prm<<EOF
REPLICAT RGGTEST4
USERID ggs, PASSWORD ggs
DISCARDFILE /ggs/dirrpt/RGGTEST4.dsc,append,MEGABYTES 500
ASSUMETARGETDEFS
MAP SCOTT.BONUS, TARGET SCOTT.BONUS,FILTER (@RANGE (2,2));
MAP SCOTT.DEPT, TARGET SCOTT.DEPT,FILTER (@RANGE (2,2));
MAP SCOTT.EMP, TARGET SCOTT.EMP,FILTER (@RANGE (2,2));
MAP SCOTT.SALGRADE, TARGET SCOTT.SALGRADE,FILTER (@RANGE (2,2));
EOF

2° 目标端添加四个检查点表:

cd /ggs
./ggsci
DBLOGIN USERID ggs PASSWORD ggs
ADD CHECKPOINTTABLE ggs.rggtest1_ckpt
ADD CHECKPOINTTABLE ggs.rggtest2_ckpt
ADD CHECKPOINTTABLE ggs.rggtest3_ckpt
ADD CHECKPOINTTABLE ggs.rggtest4_ckpt
exit

3° 目标端添加四个应用进程:

cd /ggs
./ggsci
DBLOGIN USERID ggs PASSWORD ggs
ADD REPLICAT RGGTEST1, EXTTRAIL /ggs/dirdat/PGGTEST1/rt, CHECKPOINTTABLE ggs.rggtest1_ckpt
ADD REPLICAT RGGTEST2, EXTTRAIL /ggs/dirdat/PGGTEST1/rt, CHECKPOINTTABLE ggs.rggtest2_ckpt
ADD REPLICAT RGGTEST3, EXTTRAIL /ggs/dirdat/PGGTEST2/rt, CHECKPOINTTABLE ggs.rggtest3_ckpt
ADD REPLICAT RGGTEST4, EXTTRAIL /ggs/dirdat/PGGTEST2/rt, CHECKPOINTTABLE ggs.rggtest4_ckpt
exit

源端和目标端启动进程并验证:

1° 源端启动抽取和发送进程:

cd /ggs
./ggsci
START EXTRACT EGGTEST1
START EXTRACT PGGTEST1
START EXTRACT EGGTEST2
START EXTRACT PGGTEST2
INFO ALL
INFO *
exit

2° 目标端启动应用进程:

cd /ggs
./ggsci
START REPLICAT RGGTEST1
START REPLICAT RGGTEST2
START REPLICAT RGGTEST3
START REPLICAT RGGTEST4
INFO ALL
INFO *
exit

3° 同步验证:

# 源端:
sqlplus scott/tiger
insert into SALGRADE select * from SALGRADE;
insert into SALGRADE select * from SALGRADE;
insert into SALGRADE select * from SALGRADE;
insert into SALGRADE select * from SALGRADE;
insert into SALGRADE select * from SALGRADE;
commit;
select count(*) from SALGRADE;
exit
# 目标端:
sqlplus scott/tiger
select count(*) from SALGRADE;
exit
# 继续监控源端和目标端OGG进程,验证同步成功

简单总结:

本例中,我们使用了含有RANGE操作的FILTER子句,将抽取进程的负载切分到了两个流里面:
  FILTER (@RANGE (1,2))和FILTER (@RANGE (2,2))

FILTER clause子句用来提升OGG进程性能
RANGE通过计算表中的键值列的hash值来均匀的分割负载到多个流中
两者连用使每一个提取进程只处理一半的负载

每一个提取进程将自己的trail文件写入到自己的trail文件目录中
并且在源端分别为其配置了一个专用的发送进程投递这些trail文件
这些发送进程分别将各自的trail文件投递到目标端并写入了相互分离的目录中

目标端的应用进程负载又被分割成了四个流,每两个流对应一个发送进程
依然使用 FILTER (@RANGE (1,2))和FILTER (@RANGE (2,2)) 进行拆分

负载切分调优思路:

有些时候会发现,增加额外的应用进程组是唯一解决OGG复制慢的方法,这里有多种分割负载到多个进程的方法:

1,可以指定不同的表到不同的进程,为某些表单独指定进程,而非一个业务账号只使用一个进程
2,依据经验,将业务相关的表放在一起进行传输
3,具有参照完整性的表要放在同一个进程组里
4,可以使用RANGE在逻辑上分割相关的表的负载到多个流里面
5,如果单个表的负载过大,单独的进程处理不过来,应该使用RANGE分割

[TOC]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值