- 最后登录
- 2017-5-4
- 在线时间
- 81 小时
- 威望
- 999
- 金钱
- 2391
- 注册时间
- 2013-9-11
- 阅读权限
- 150
- 帖子
- 1124
- 精华
- 5
- 积分
- 999
- UID
- 1220
|
1#
发表于 2013-10-10 20:04:08
|
查看: 8700 |
回复: 0
OGG goldengate 常用性能调优
常用调优方法 – 寻找extract瓶颈
使用系统工具监控Extract运行的CPU/IO/Mem
CPU:top,topas,sar等
IO:iostat等
Mem:vmstat等
使用TESTMAPPINGSPEED
可以使Extract只解析日志但不写队列,用于测试日志抽取速度
如果加入该参数使Extract性能能够显著提高,则写队列为可能瓶颈
缩小Extract包含的表范围
只保留一个数据变化较小表或者加一个测试表,观察Extract处理速度是否得到提高,如有显著提高则可能瓶颈在数据库fetch,可通过查询运行期间存在哪些select语句予以验证
Extract的瓶颈一般在于LCR转换为UDF
进程拆分
最有效方式,可以使用多个CPU并行处理
注:每个进程可以最多占用CPU个数为RAC节点数+1,即如果是2节点RAC则每个抽取进程最高占用3个CPU内核
如果系统IO出现瓶颈:
增大日志读取间隔
EOFDELAY 3 //间隔3秒,缺省为1秒
增大内存刷新间隔
FLUSHSECS 3 //间隔为3秒,缺省为1秒
常用调优方法 – data pump调优
使用PASSTHRU避免与源数据库交互
如网络带宽较低
加入数据压缩
RMTHOST …, COMPRESS //压缩在网络上传输的数据。如果本地局域网则无须加入压缩,因为其会增加CPU压力。
增大tcp缓存大小
RMTHOST newyork, MGRPORT 7809, TCPBUFSIZE 100000, TCPFLUSHBYTES 300000
如IO出现瓶颈
增大队列读取间隔
EOFDELAY 3 //间隔3秒,缺省为1秒
增大内存刷新间隔
FLUSHSECS 5 //间隔为5秒,缺省为1秒
常用调优方法 – 寻找Replicat瓶颈
使用系统工具监控Extract运行的CPU/IO/Mem
CPU:top,topas,sar等
IO:iostat等
Mem:vmstat等
使用TESTMAPPINGSPEED
可以使Replicat只解析队列但不实际写数据库,用于测试读队列速度
如果能使Replicat性能能够显著提高,则写数据库队为瓶颈
Replicat的瓶颈一般在于写数据库
常用调优方法 – replicat调优
表一定要指定主键或者唯一索引
使用操作合并
BATCHSQL BATCHESPERQUEUE 100, OPSPERBATCH 8000
说明:只适用于小表,对于列特别多或者字段特别长的表反而可能降低性能;对于少量表重复进行操作的情景例如批处理比较有效。可以通过对两个子参数的组合进行尝试获取最佳性能。
对于密集小交易使用交易合并
GROUPTRANSOPS 1000
对大交易使用交易分拆
MAXTRANSOPS 10000
使用insertappend加速插入速度
拆分为多个replicat
GROUPTRANSOPS与MAXTRANSOPS
Grouptransops示例
三个交易,分别有25/50/60个记录
假如grouptransops 为100 (缺省值),则Replicat一直要等待到第三个交易时25 + 50 + 60 > 100才后Commit
两参数关系算法
if end of transaction OR num of operations >= maxtransops then
if num of operations >= grouptransops then
COMMIT transaction.
举例
假设Grouptransops = 100, maxtransops = 1,则上述例子中同样要等待第三个交易后提交
假设Grouptransops = 1, maxtransops = 1,则每个交易提交一次
假设Grouptransops = 10, maxtransops = 10,则每10个记录提交一次
建议二者设置为相同值 MAXTRANSOPS = GROUPTRANSOPS
常用调优方法 – 并行处理与进程拆分
拆分粒度
可以通过schema进行区分,每个复制链路负责一个或多个schema;
也可以根据表进行分割,每个进程负责不同表的集合;
对于同一个表也可以通过Range拆分为几个进程同时处理。例如:
Replicat 1:
MAP sales.acct, TARGET sales.acct, FILTER (@RANGE (1, 2));
Replicat 2:
MAP sales.acct, TARGET sales.acct, FILTER (@RANGE (2, 2));
进程拆分的注意事项
各进程间没有同步机制,应尽量确保同一交易涉及表在一个进程
单个extract进程可处理日志一般为30-50G/小时,单个replicat进程一般只能处理1G队列/小时,可采用一个extract对多个replicat的模式
由于extract在catch up(追赶)模式需要读取归档日志,速度慢且耗费资源高,建议extract一旦出现较大延迟则立即进行拆分
常用调优方法 – 并行处理交易一致性
保证抽取一致性
由于OGG的Extract性能较高,可以使用尽量少的Extract完成抽取,多个之间以业务或Schema进行区分
单个Extract抽取出来的队列中可以保证交易的一致性和先后顺序
尽量保证投递一致性
如单个Replicat无法满足一个队列投递数据要求
可以根据表进行分割,每个进程负责不同表的集合,尽量保证同一业务涉及表放在一个Replicat中,可以保证一致性;(需临时禁止表间的外键链接保证Replicat可进行拆分)
对于同一个表也可以通过Range拆分为几个进程同时处理
Replicat拆分可能临时造成各进程间不同步,但是
多个Replicat性能会得到很大提高,可以保证数据复制始终是实时的
当源端出现灾难后,由于Extract可以保证源端抽取时数据的一致性,而目标端多Replicat读取的是同一个队列,当它们应用队列数据完毕后是可以达到数据一致的
|
|