经过在replicat使用batchsql来把相同的语句做为一批处理,而不是像普通的处理方式,每行语句单独提交。对于常常大批量更新,使用batchsql能够大幅度提升性能。可是要注意若是应用程序中有lob字段,或是常常有只更新少许的行,这样使用batchsql没有益能好处,反而使replicat在normal和batch mode以前来回switch,而会影响性能.对于有些不知足batchsql的条件,replicat会进行重试三次,在这样的状况下,性能降低的状况更加明显.sql
batchsql 两个主要的参数,定义了多少条语句做为一个语句提交
batchsql opsperqueue 30000, opsperbatch 30000
BATCHSQL statistics:oracle
Batch operations: 30000
Batches: 1
Batches executed: 1
Queues: 4
Batches in error: 0
Normal mode operations: 0
Immediate flush operations: 0
PK collisions: 0
UK collisions: 0
FK collisions: 0
Thread batch groups: 0
Commits: 1
Rollbacks: 0
Queue flush calls: 2
batchs表示生成多少个batch,batchs executed表示在db层面执行了多少次batch.两个参数default为1200.对于大多数状况下已经很适用了.
对于batchsql尽可能多测试,网上有不少文章,无论三七二十一,直接就建议设置batchsql。发如今ggserr.log中产生大量在normal mode和batch mode之间来回switch的情形,这样反而影响了replicat的性能,必定要根据实际状况作出设置,要否则oracle怎么不把这个选项直接加到replicat中呢?因此有必定的适应场景,须要由用户本身去根据环境进行合理的配置.ide