hibernate - Hibernate 带宽问题:比 SQL Developer 花费更多的时间
问题描述
我遇到了 Hibernate 发出的奇怪问题。我正在运行一个返回大约 300.000 个结果的简单查询
从 MY_TABLE 中选择 COLUMN_A、COLUMN_B、COLUMN_C、COLUMN_D、COLUMN_E、COLUMN_F,其中 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 慢?无论如何配置hibernate如何控制带宽?(我从来没有听说过)
我的应用程序是一个版本为 2.1.1.RELEASE 的 spring-boot 应用程序。
非常感谢
解决方案
在将应用程序编译为 jar 中的 jar 然后使用 JRE8 运行时,我一直面临着与休眠速度完全相同的问题。解决方案是在最终的 jar 中(或 lib 目录中的依赖 jar)中包含具有扩展类的休眠库
从 JRE8 开始,jar 中的 jar 使休眠查询执行变得极其缓慢。
编辑:在我的情况下,这不是弹簧启动问题或休眠问题,而是 JRE8 如何处理 zip 放气,在使用以下插件设置由 maven 编译后,性能显着提高
...
<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>
...
推荐阅读
- angular - ngrx - 如何更新 ActionReducerMap 中的另一个减速器
- python - 散景热图选择链接/数据显示
- node.js - 向nestjs swagger添加服务器会出现权限错误
- python - Discord.py 昵称命令
- visual-c++ - 为什么我的计算机上有多个相同的 C++ .dll 副本?
- python - 如何使用 python 只选择我需要的列
- performance - 移动应用动态代码性能分析工具
- c# - xamarin 表单 - 填充集合视图内的列表视图
- laravel - laravel 使用谷歌翻译的自动翻译过程
- java - 在keyclock自定义身份验证器中使用spring boot