前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >goldengate replicat优化思路以及案例讲解

goldengate replicat优化思路以及案例讲解

作者头像
徐靖
发布2020-08-05 15:16:03
1.6K0
发布2020-08-05 15:16:03
举报
文章被收录于专栏:DB说DB说

【goldengate架构图】

注释:goldengate通过抽取源端日志写入trail(当然可以跳过),replicat应用trailfile中数据到目标端(可能是数据库也可能是消息队列中),replicat写入性能取决于ogg和目标端,ogg可能存在非优化配置或者目标端配置问题.

【goldengate replicat参数优化】

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.

3、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

【性能对比】

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 udapp 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档