休眠带宽问题:比SQL Developer花更多的时间

时间:2019-05-07 17:38:39

标签: hibernate oracle-sqldeveloper

我遇到一个与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的速度)的速度接收响应。

enter image description here

有人知道为什么休眠数据传输比这种情况下的SQL Developer慢吗? 无论如何,有没有配置休眠方式来控制带宽? (我从没听说过)

我的应用程序是具有2.1.1.RELEASE版本的spring-boot应用程序。

非常感谢您

1 个答案:

答案 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>
...