简单说明:
本博文介绍提升应用进程性能的批处理进程模式BATCHSQL,以及该模式下的其他配置参数
开启方法:
目标端应用进程打开BATCHSQL模式的配置语句:
REPLICAT RGGTEST1
USERID ggs, PASSWORD ggs
DISCARDFILE /ggs/dirrpt/RGGTEST1.dsc, append, MEGABYTES 500
ASSUMETARGETDEFS
MAP SCOTT.*, TARGET SCOTT.*;
BATCHSQL BATCHESPERQUEUE 100, OPSPERBATCH 200
-- 该配置行就是打开BATCHSQL模式的配置语句
-- 可以只使用BATCHSQL关键字开启该模式,而不进行其他配置
其他参数和注意简介:
默认情况下应用进程同一时间只会执行一条SQL,如同抽取进程一样
应用进程从trail文件中读取到SQL语句然后重构他们,当重构完成后,这些语句会应用到目标库
在这种情况下,应用进程要慢于抽取进程读取日志文件写入事务到trail文件的速度,延迟较大
OGG提供了BATCHSQL模式来优化该情况,该模式下对相同对象的相似SQL会触发批处理
在内存中生成批量处理语句并一次装入库中,对同一个表以相同的字段列表执行相同操作的SQL才会触发批处理
该模式非常适合100Bytes以内的小数据事务,Oracle官方建议该数量级的事务使用BATCHSQL模式可以减少归档的产生
当事务改变的规模超过5000Bytes,BATCHSQL模式的优势就会下降
该模式下应用进程在内存中缓存更多的SQL语句,需要更多的内存容量,以下参数控制缓存的SQL数量和内存使用:
BATCHESPERQUEUE
该参数控制保存在内存队列中的最大批处理数量
默认50Bytes,配置范围在1Byte到1000Bytes之间
BATCHTRANSOPS
该参数控制一个批次中批量提交的最大SQL操作数量
默认1000Bytes,配置范围在1Byte到100000Bytes之间
BYTESPERQUEUE
该参数控制用于队列分配的最大内存
默认20MB,配置范围在1MB到1GB之间
OPSPERBATCH
该参数控制一个批次批量操作的行的最大数量
默认1200Bytes,置范围在1Byte到100000Bytes之间
OPSPERQUEUE
该参数控制一个队列中所有批处理处理的最大行操作
默认1200Bytes,置范围在1Byte到100000Bytes之间
注意:
BATCHSQL模式下有内建异常处理功能,当一批中的SQL有一个执行失败时
整个批次回滚,并转换成普通模式再次执行,该容错机制是自动运行的
但是如果频繁的发生批处理失败回滚转化成普通模式再次执行,性能会急剧下降,也就是当前环境并不适合BATCHSQL模式
该异常处理功能可以继续配置BATCHERRORMODE参数,该参数和HANDLECOLLISSIONS参数功能相似:
当INSERT操作失败时,OGG转化成UPDATE操作,当DELETE操作失败时,OGG会忽略该操作
最好为行数据超过25KB的表、包含LONG或者LOB的表
以及主键之外包含多个唯一性约束的表创建专门的应用进程来开启BATCHSQL模式
[TOC]