DB-hub Technology Oracle Goldengate replicat优化

Goldengate replicat优化

By 徐靖
from:https://cloud.tencent.com/developer/article/1674398

Goldengate replicat常见优化参数:

grouptransops:将源端原始事务进行合并后批量提交,但是不会破坏原始事务一致性,合并是按照操作记录来计算,不是按照事务数来合并计算.例如A事务影响3条记录,B事务影响4条记录,C事务影响5条记录.此时grouptransops此时设置10,那么3个事务被合并一起提交(如果说3个事务间隔过来不一定合并,因为可能一个事务就提交了,否则A事务可能很久都不会被提交的,出现饿死情况)–参考上个文章,在空闲数据库,ogg延迟问题

maxtransops:对于是拆分事务,将大事务拆分小事务进行提交且会破坏事务完整性,特定场景会使用的,例如全插入的事务可以拆分,排错可以设置maxtransops为1

batchsql:也是将源端原始事务按照相同类型(相同表、相同操作类型、相同列)进行合并放在不同batch中组成一个queue.与grouptransops区别比较大,batchsql有自己batch引擎通过array方式提交,例如一次合并1000条一次提交到dbms,grouptransops是一条一条提交到dbms(one by one).

虽然batchsql可以提升性能,根据官方说明平均每行改变是100bytes长度记录,可以提升300%的性能,当改变达到5000bytes,则效果不明显,测试发现特定情况下(500以下),性能提升更多,尤其是单一类型操作的.同时batchsql会使用更多内存,默认是20m大小,如果batchsql设置queue的太大,则会使用更多内存.

【batchsql限制】
1、存在lob、long等大字段时候
2、存在除主键之外不能包含唯一索引
3、语句长度不能超过25k.
4、sql导致错误,例如冲突之类

【goldengate replicat延迟案例】

--RTEST延迟124小时.
REPLICAT    RUNNING     RTEST    124:11:03     00:00:01
--RETEST参数配置
replicat retest
userid goldengate, password xiaoxu
--grouptransops 2000
batchsql
reportcount every 1 hours, rate
discardfile /ogg1121/dirrpt/retest.dsc, purge,megabytes 5000
discardrollover at 14:00
dynamicresolution
MAP SOURCE.XIAOXU, TARGET TARGET.XIAOXU;

通过使用GROUPTRANSOPS和BATCHSQL性能对比

采用grouptransops 2000方式

*** Total statistics since 2019-03-15 08:37:56 ***
 Total inserts/minute:                    4836.89
 Total updates/minute:                       0.00
 Total deletes/minute:                       0.00
 Total discards/minute:                      0.00
 Total operations/minute:                 4836.89

采用batchsql方式

*** Total statistics since 2019-03-15 08:46:06 ***
 Total inserts/minute:                    5268.69
 Total updates/minute:                       0.00
 Total deletes/minute:                       0.00
 Total discards/minute:                      0.00
 Total operations/minute:                 5268.69

【如何优化replicat延迟】

–goldengate参数优化

通过更改goldengate replicat参数后,grouptransops—>batchsql,性能虽然有提升,但是只有10%左右,明显没有达到期望的值且本身插入性能也没有达到期望,每分钟4800条,grouptransops平均每条插入时间是12.5ms,batchsql平均每条插入时间是11.3ms.对于单条插入平均相应时间太慢了,但是不能说明数据库有问题。从ogg角度来说,单一进程已经是没有太多优化空间,可以考虑拆分进程等方式解决,可以从数据库角度看下是否存在优化空间.

–数据库角度优化

1、分析数据库性能

oracle有awr,mysql可以分析慢查询

2、分析表结构以及索引设计

表的索引多少、索引个数以及索引类型.

【本次案例原因分析】

从ogg角度已经无太多优化空间.从数据库角度分析下.

本次案例中是oracle数据库,表是分区表(按天分区,保留90天),索引个数是4个,3个全局索引和1个分区索引,字段长度是294byte.表中无lob等大字段.主键是varchar2(50).

性能数据:

每分钟4800条,grouptransops平均每条插入时间是12.5ms

每分钟5300条,batchsql平均每条插入时间是11.3ms

索引数据:

备注:其中全局索引的集群因子跟表数据基本保持一直,这种说明数据都是无序的,通过索引查找数据时,每次查找数据都在不同数据页上,导致IO性能很差.

优化全局索引修改local索引后测试性能:

备注性能:grouptransops每次插入数据是0.39ms,batchsql每次插入数据是1/5的0.39ms,所以插入慢不一定是数据库问题,有可能是表设计问题,改成local index对于查询的影响与insert数据性能需要折中考虑,本次是优化思路。

把主键从global改成local的效率(主键且包括3个其他索引非空表)采用grouptransops 2000方式

*** Total statistics since 2019-03-14 14:31:44 ***
 Total inserts/minute:                  152058.02
 Total updates/minute:                       0.00
 Total deletes/minute:                       0.00
 Total discards/minute:                      0.00
 Total operations/minute:               152058.02

把主键从global改成local的效率(主键且包括3个其他索引非空表)采用batchsql方式

“`
*** Total statistics since 2019-03-14 14:24:58 ***
Total inserts/minute: 773252.89
Total updates/minute: 0.00
Total deletes/minute: 0.00
Total discards/minute: 0.00
Total operations/minute: 773252.89
“`
【性能对比】

Leave a Reply

您的邮箱地址不会被公开。 必填项已用 * 标注

Related Post