【发布时间】:2019-04-15 10:42:39
【问题描述】:
我有一个使用 JPA 查询的 Spring Boot 应用程序。直接在实时 Oracle DB 上执行相同的查询往往会在 20-40 毫秒内给出结果。另一方面,当我尝试使用该应用程序点击时,需要的时间从 1-2 秒到 50-60 秒不等。
我想了解这种行为的原因,以及它为什么会出现不可预测的行为。我们怀疑这可能是池中的线程数量有限,但后来在将应用程序与外部使用隔离后,现在只有一个用户表现出相同的行为。
查询应该以快速一致的方式执行。 我想知道这种行为背后的可能原因。
【问题讨论】:
-
你在比较苹果和橘子。普通查询执行和 JPA 查询是您不能也不能比较的东西。后者涉及更多的事情,比如为每一行创建一个对象实例,可能执行另一个子查询来获取引用的数据。所以在不知道你的配置、你的实体、数据库结构的情况下,可能会有很多事情。
-
如果 hibernate 是您的 JPA 提供者,您可以让它显示它实际用于与 DB 对话的 SQL——这可能有助于您了解其中的区别。将
<property name="hibernate.show_sql" value="false" />添加到您的 persistence.xml(或以其他方式设置此属性)。