我遇到一个与Hibernate发行的奇怪文件。我正在运行一个简单的查询,返回大约300.000个结果
选择COLUMN_A,COLUMN_B,COLUMN_C,COLUMN_D,COLUMN_E,COLUMN_F 来自MY_TABLE 其中COLUMN_G ='Reporting';
在SQL开发人员大约需要1分钟。但是在休眠状态下需要4分钟。
String queryString = "select COLUMN_A, COLUMN_B, COLUMN_C, COLUMN_D, COLUMN_E, COLUMN_F from MY_TABLE where COLUMN_G = 'Reporting'";
Query query = entityManager.createNativeQuery(queryString, Reporting.class);
List<ReportingScore> result = query.getResultList();
我认为Hibernate创建对象的开销不是问题的原因。
当SQL Developer执行查询时,我通过查看Windows任务管理器发现带宽平均为1.1Mbps
但是当Hibernate执行相同的查询时,它以300Kbps(慢1/3的速度)的速度接收响应。
有人知道为什么休眠数据传输比这种情况下的SQL Developer慢吗? 无论如何,有没有配置休眠方式来控制带宽? (我从没听说过)
我的应用程序是具有2.1.1.RELEASE版本的spring-boot应用程序。
非常感谢您
答案 0 :(得分:0)
当在jar中将jar编译为应用程序,然后在JRE8中运行时,我一直面临着与Hibernate慢速完全相同的问题。解决方案是在最终的jar(或lib目录中的依赖jar)中拥有带有扩展类的休眠库
从JRE8开始,jar中的jar在休眠查询执行中增加了极慢的速度。
编辑:在我看来,这不是春季启动问题或休眠问题,而是在使用以下插件设置通过maven编译后,JRE8如何处理zip压缩问题
...
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>myapp.mainclass</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
...
</plugins>
</build>
...