【问题标题】:Different execution plans for Toad and Jasper Report?Toad 和 Jasper Report 的执行计划不同?
【发布时间】:2014-04-24 07:11:55
【问题描述】:
我遇到了一个奇怪的情况,从 Toad 运行 SQL 查询需要几秒钟才能完成,而包含相同查询的 Jasper 报告需要半个多小时才能产生结果(使用相同的参数)。以下是一些细节:
- 我查了一下,Oracle(11g 版)在这两种情况下使用了不同的执行计划。
- 我考虑过使用存储的大纲,但是报告稍微修改了查询(绑定变量被重命名;在多个值的情况下,即 $P!{...},报告只是将值插入到查询中,然后值的组合太多,无法绕过),所以轮廓不起作用。
- 我在 iReport 5.1 和 OpenReports 中运行了报告,两者都需要大约 35 分钟。
- 原始查询已通过一些提示进行了调整,如果没有提示,完成报告所需的时间相当长。
对于如何处理此问题的任何建议,我将不胜感激。
【问题讨论】:
标签:
sql
oracle
jasper-reports
【解决方案1】:
首先,不要使用 TOAD 进行查询调优。尽可能快地向您显示结果集的前几行,以使应用程序尽可能地响应,这符合 TOAD 的兴趣。为此,TOAD 会向您的查询注入 FIRST_ROWS 提示。一个不错的功能,但不适用于调整查询。
现在,为了解决您的查询耗时过长,我建议您首先调查花费时间的地方。您可以通过跟踪查询执行来做到这一点,如here 所述。完成后,知道时间都花在了哪里,但仍然不知道如何解决,请发布执行计划和统计数据。
【解决方案2】:
优化器环境可能存在差异。您可以使用
进行检查
select * from
V$SES_OPTIMIZER_ENV
where sid = sys_context(’userenv’,’sid’)
在您的 toad 会话和 Jasper 报告中运行此程序并比较结果。