經過在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