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(必须);

48 个赞

谢谢很好的经验分享。

7 个赞

学习

6 个赞

道长且阻。

6 个赞

学习

6 个赞

学习下

6 个赞

学习了

5 个赞

学习了

5 个赞

学习一下

5 个赞

学习学习

4 个赞

学习了

2 个赞

感谢分享ps相关的经验!对于rows方面,我的建议是关注true,这能显著提升性能。

2 个赞

支持一下

2 个赞

学习

1 个赞

收藏了

1 个赞

技术细节讲得很清楚,学到了!

1 个赞

你好,你提的这个技术问题牵涉到OceanBase企业版范围内的功能细节。建议你通过以下方式寻求帮助:
1.如你所在的企业客户已签署OceanBase企业版销售合同,请你联系客户经理;
2.如你所在的企业客户尚未签署OceanBase企业版销售合同,你可通过OceanBase官网商务咨询页面留下你的联系方式,OceanBase企业版的业务顾问会在一个工作日内与你联系。
OceanBase官网商务咨询

https://www.oceanbase.com/contactus?fromPage=https%3A%2F%2Fwww.oceanbase.com%2Fsoftwarecenter-enterprise&dataSources=softwarecenter-enterprise_footercontact_d2022

1 个赞

干货满满,受益匪浅

1 个赞

赞一个!

1 个赞

点赞

1 个赞