我目前面临着从 Java 程序启动的运行缓慢的 Hibernate 查询的问题。它在后端调用 Oracle 11g。
此查询在第一次运行时需要 40-90 秒。然而,在随后的执行中,查询会在很短的时间内返回(我什至没有看到数据库被命中,因此假设休眠正在缓存它)。
如果我将查询从企业管理器复制并粘贴到 SQL 客户端并直接运行相同的查询(甚至更改一些参数),查询将在几分之一秒内返回。
如果我查看 EM 中的性能调整选项卡,我会发现所花费的时间主要用于用户 I/O 等待 (97.5%) 和 CPU (2.5%)。这是否意味着我在休眠中使用的提取大小配置的值太小?
如果您可能需要任何其他信息来帮助我深入了解此问题,请告诉我。
======
我们确实在表上有一个索引,我可以看到它被用作查询执行的一部分,不幸的是它不是很可读,但我不确定如何包含它:
Id Operation Name Rows
(Estim) Cost Time
Active(s) Start
Active Execs Rows
(Actual) Read
Reqs Read
Bytes Mem
(Max) Activity
(%) Activity Detail
(# samples)
0 SELECT STATEMENT 1
1 . FILTER 1
2 .. HASH JOIN RIGHT OUTER 2674 7223 1 +4 1 0 1M
3 ... TABLE ACCESS FULL TOTEM_EQ_EXPIRYCODES 475 4 …Run Code Online (Sandbox Code Playgroud)