通过在replicat使用batchsql来把相同的语句作为一批处理,而不是像普通的处理方式,每行语句单独提交。对于经常大批量更新,使用batchsql可以大幅度提高性能。但是要注意如果应用程序中有lob字段,或是经常有只更新少量的行,这样使用batchsql没有益能好处,反而使replicat在normal和batch mode之前来回switch,而会影响性能.对于有些不满足batchsql的条件,replicat会进行重试三次,在这样的情况下,性能下降的情况更加明显.

   batchsql 两个主要的参数,定义了多少条语句作为一个语句提交
   batchsql  opsperqueue 30000, opsperbatch 30000

BATCHSQL statistics:

             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中呢?所以有一定的适应场景,需要由用户自己去根据环境进行合理的配置.