有谁能消除我的疑虑吗?
参考文档https://docs.oracle.com/cd/B28359_01/java.111/b31224/oraperf.htm,假设我批量更新(batch size=10)使用与绑定变量相同的SQL,当到达Oracle db时,SQL的执行将是1次还是10次?
从我在EM监控中观察到的情况来看,SQL执行次数是原来的10倍。它是正常预期行为还是可以优化为在Oracle数据库中执行一次?
发布于 2016-03-17 11:24:16
您链接到的文档有许多条件需要为true才能工作。使用Oracle的增强版本时,您只能使用预准备语句以及其他限制。如果在每条语句之后执行commit,那么批处理就会结束。
我会相信EM的统计数据;但请随意发布一些代码,这样我们就可以给出一些比胡乱猜测更多的东西。
更新:
@ibre5041是正确的;您必须查看网络往返,以及来往于客户端的数据,以确定语句是否正在被批处理。
有几种方法可以做到这一点;dba可以监视v$sysstat的统计信息,如“已发送的消息”、“通过SQL*Net从客户端接收的字节数”等,并在启用批处理的情况下进行测试,在禁用批处理的情况下再次进行测试。另一种方法是使用Wireshark或snoop或其他网络数据包实用程序来捕获网络流量,以查看您的往返流量是14000次还是更少。您还可以在SQLNet侦听器上启用监视。
您发布的Update SQL看起来可以很好地满足一些要求。问题仍然是您是否在使用预准备语句,您的应用程序是否在调用commit,以及您是否正在关闭循环中的语句或连接。
发布于 2016-03-17 11:51:26
sql与下面类似
update tableA set colA =:1, colB =:2, colC =:3, ....
where columnZ =:10开发人员正在为新开发的应用程序进行负载测试。让我们假设他们的代码是正确的,所以我真正关心的是db。当批量更新到oracle时,oracle是否可以一次优化执行它?
下面的示例图像开发者批量更新13k行记录并发送给db一次,db执行了13k次。

https://stackoverflow.com/questions/36050879
复制相似问题