oceanbase for oracle batch execute的测试记录和参数建议(经验分享)

之前发错了板块,想放到经验分享板块一起讨论,但是好像不能在那边新建.
希望能大家能一起看看是否有帮忙,同时有没有新的建议.因为测试的不完整,可能还有其他疏忽的场景.

数据库版本

OceanBase 4.3.5.5 (r105070022026031722-0639a4b5e9af1dae33bff3fefac15c3b62ae5571) (Built Mar 17 2026 22:56:58)

驱动版本

最新驱动版本:2.4.17

一些遇到的问题和验证后的结论

关于executeBatch返回的条数问题

参数:rewriteBatchedStatements=true&useArrayBinding=true
一句话结论:batch insert返回的rows不准确; batch update返回的rows可以准确;
如果rewriteBatchedStatements设置为false,又会导致insert、update非常慢;

insert 在batch模式下不能获取到真实的条数,就算拆分了executeBatch的批量条数并累加,也不能获取到真实的。因为可能执行的时候参数被合并掉了。
for (int i = 1; i <= rowCount; i++) {  
    ps.setInt(1, 1);  
    ps.setString(2, "updated-" + i);  
    ps.setLong(3, i);  
    ps.addBatch();  
    if (i % batchSize == 0) {  
        rows = rows + ps.executeBatch().length;  
        ps.clearBatch();  
        System.out.println("update ..."+rows);  
    }  
}  
rows = rows + ps.executeBatch().length;

但是update 在batch模式下,累加起来是可以的.

使用executeBatch执行更新语句性能差的问题

设置rewriteBatchedStatements=true;
设置autoCommit=false并设置定量提交;
设置useArrayBinding=true(必须);

1 个赞