JDBC Batch更新,它将在Oracle数据库中执行多少次

时间:2016-03-17 02:57:54

标签: oracle jdbc

任何人都可以清除我的怀疑吗?

请参阅文档https://docs.oracle.com/cd/B28359_01/java.111/b31224/oraperf.htm,假设我使用与绑定变量相同的SQL批量更新(批量大小= 10),当来到Oracle数据库时,SQL执行将是1次还是10次?

从我在EM监控中观察到的情况来看,SQL执行是10次。这是正常的预期行为还是可以优化在Oracle db中执行1次?

2 个答案:

答案 0 :(得分:0)

您链接到的文档有很多条件需要真实才能生效。使用Oracle的增强版本,您只能使用预准备语句以及其他限制。如果您在每个语句后执行提交,则结束批处理。

我会相信EM统计;但是随意发布一些代码,这样我们就可以提供更多的东西。

更新

@ ibre5041是对的;您必须查看网络往返和来自客户端的数据,以确定是否正在批量处理语句。

有几种方法可以做到这一点; dba可以监视v $ sysstat的统计信息,例如"发送的消息" "通过SQL * Net从客户端收到的字节"等,并启用批处理进行测试,并在禁用批处理时再次测试。另一种方法是使用Wireshark或snoop或其他网络数据包实用程序捕获网络流量,以查看您是否来回14,000次或更少。您还可以打开SQLNet侦听器上的监视。

您发布的更新SQL看起来很适合满足某些要求。问题仍然存在,无论您是使用预准备语句,还是您的应用程序是否正在调用提交,以及您是否正在关闭循环中的语句或连接。

答案 1 :(得分:0)

类似下面的SQL

update tableA set colA =:1, colB =:2, colC =:3, ....
where columnZ =:10

开发人员为新的开发应用程序进行负载测试。让我们假设他们的代码是正确的,所以我的关注实际上是在db中。当批量更新到oracle时,oracle会一次优化执行它吗?

以下示例图像开发人员批量更新为13k行记录并发送一次到db,db执行了13k次。

enter image description here