Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 休眠批插入。它会使用一个插入而不是多个插入吗?_Java_Oracle_Hibernate_Batch File - Fatal编程技术网

Java 休眠批插入。它会使用一个插入而不是多个插入吗?

Java 休眠批插入。它会使用一个插入而不是多个插入吗?,java,oracle,hibernate,batch-file,Java,Oracle,Hibernate,Batch File,我一直在四处寻找,试图确定一些我不确定的休眠行为。在正确设置Hibernate批处理的场景中,它是否只在发送批处理时使用多个insert语句?不能使用与DB无关的多插入语句吗 我想我是想确定我的配料设置是否正确。我看到了多个insert语句,但也看到了行“执行批处理大小:25” 我可以发布很多代码,但我尽量保持通用性。因此,我的问题是: 1) 您可以从日志中读取什么来确定正在使用批处理 2) 是否可以让Hibernate使用多行insert而不是多条insert语句?Hibernate使用多条i

我一直在四处寻找,试图确定一些我不确定的休眠行为。在正确设置Hibernate批处理的场景中,它是否只在发送批处理时使用多个insert语句?不能使用与DB无关的多插入语句吗

我想我是想确定我的配料设置是否正确。我看到了多个insert语句,但也看到了行“执行批处理大小:25”

我可以发布很多代码,但我尽量保持通用性。因此,我的问题是:

1) 您可以从日志中读取什么来确定正在使用批处理


2) 是否可以让Hibernate使用多行insert而不是多条insert语句?

Hibernate使用多条insert语句(每个实体插入一条语句),但会以批处理模式将它们发送到数据库(使用and)。这就是您在日志中看到多个insert语句的原因,但也是“执行批处理大小:25”

批处理语句的使用大大减少了到数据库的往返次数,如果它比执行一条包含多个插入的语句效率低,我会感到惊讶。此外,它还允许在单个数据库调用中混合更新和插入


我很确定Hibernate不可能使用多行插入,但我也很确定这是没有用的。

我知道这是一个老问题,但我遇到了相同的问题,我认为Hibernate批处理意味着Hibernate将多个插入合并到一个语句中,但它似乎没有这样做

经过一些测试,我发现这个答案是:一批多行插入和多行插入一样好。我做了一个测试,一次使用hibernate批处理插入1000行,一次不插入。这两个测试都花了大约20秒,所以在使用hibernate批处理时没有性能提升

当然,我尝试使用MySQL连接器/J中的rewriteBatchedStatements选项,该选项实际上将多个插入组合到一个语句中。它将插入1000条记录的时间缩短到3秒


所以毕竟hibernate批处理似乎是无用的,而真正的多行插入则要好得多。我是否做错了什么,或者是什么原因导致了我的测试结果?

Oracle批量插入程序收集entyty数组,并将单个块传递给与其关联的数据库unic ciclic insert/update/delete

是一种提高网络吞吐量的unic方法

Oracle建议从hibernate调用存储过程并向其传递数据数组。

这不仅是软件问题,也是基础设施问题! 问题是网络数据流优化和TCP堆栈碎片化。 Mysql有很多功能。 您必须执行本文中描述的操作。 在网络上正常传输正确的数据量是解决方案


您还必须验证网络mtu和Oracle sdu/tdu利用率是否与应用程序和数据库之间传输的数据有关

我将实际访问数据库,查看引擎盖下发生的情况。SqlServer有一个分析器,它可以告诉您几乎所有的事情。使用Oracle时,您更需要访问v$sql对象。我这样做了,从我所知道的,它只使用了insert语句。我确实在某个地方读到hibernate日志有误导性,但我认为这是因为特定的示例使用的是MySQL,它有一个rewriteBatchedStatements选项,可以完成这项工作(我使用的是Oracle)。酷,这让我放心。我认为这就是它的工作原理,但我没有意识到批处理语句可能与单个语句插入一样好。非常感谢。