JPA:高查询执行时间的可能原因

时间:2019-04-15 10:42:39

标签: java hibernate jpa jpql

我有一个使用JPA查询的spring boot应用程序。直接在实时oracle数据库上执行时,相同的查询往往会在20到40毫秒内给出结果。另一方面,当我尝试使用该应用程序进行点击时,需要花费的时间从1-2秒到50-60秒不等。

我想了解这种行为的原因,以了解其行为无法预测的原因。我们怀疑这可能是池中线程数量有限,但是后来在将应用程序与外部使用隔离后,现在只有一个用户显示了相同的行为。

查询应以一致的快速方式执行。 我想知道这种行为背后的可能原因。

3 个答案:

答案 0 :(得分:1)

它实际上可以是任何东西,例如网络不可靠,数据库资源争用,JDBC驱动程序未配置或JVM GC暂停。尝试确定问题出在哪里:是Java客户端还是数据库服务器占用了问题发生的时间。

如果您怀疑问题出在数据库上,那么最好在数据库服务器端跟踪连接和SQL查询。这将为您提供最多的信息,例如查询执行计划。每个数据库都有自己的工具,例如Oracle文档具有entire chapter on Performing Application Tracing

答案 1 :(得分:0)

一个可能的原因可能是您的实体关系 尝试启用休眠统计信息以获取更多详细信息:

您可以通过以下方式启用:

<persistence>
<persistence-unit name="my-persistence-unit">
    ...

    <properties>
        <property name="hibernate.generate_statistics" value="true" />

        ...
    </properties>
</persistence-unit>

答案 2 :(得分:0)

如果要与在oracle DB中执行查询的执行时间相同,则应尝试编写本机查询而不是JPA。

JPA查询和本机数据库查询完全不同,因为两者以不同的方式执行JPA使用Java执行,因此需要执行代码和查询。