Toad和Jasper报告的不同执行计划?

时间:2014-04-24 07:11:55

标签: sql oracle jasper-reports

我遇到了一个奇怪的情况,当从Toad运行时,SQL查询需要几秒钟才能完成,而包含相同查询的Jasper Report需要半小时才能生成结果(具有相同的参数)。以下是一些细节:

  • 我查了一下,Oracle(版本11g)在这两种情况下使用了不同的执行计划。
  • 我考虑使用存储的大纲,但报告稍微修改了查询(绑定变量被重命名;在多个值的情况下,即$ P!{...},报告只是将值插入查询中,然后是太多的价值组合来绕过这个,所以大纲不会起作用。
  • 我在iReport 5.1和OpenReports中运行报告,两者大约需要35分钟。
  • 原始查询会调整一些提示,如果没有它们,则需要相对较长的时间来完成报告。

我很感激有关如何处理此事的任何建议。

2 个答案:

答案 0 :(得分:0)

首先,不要使用TOAD进行查询调优。 TOAD有兴趣尽快为您提供结果集的前几行,以使应用程序尽可能快速响应。为此,TOAD会为您的查询注入FIRST_ROWS提示。一个很好的功能,但不适用于调优查询。

现在,为了解决您的查询耗时太长,我建议您先调查时间花在哪里。您可以通过跟踪查询执行来执行此操作,如here所述。一旦你完成了,并且你知道时间花在哪里,但你仍然不知道如何解决它,那么请发布执行计划和统计数据。

答案 1 :(得分:0)

优化器环境可能存在差异。您可以使用

进行检查
select * from 
V$SES_OPTIMIZER_ENV
where sid = sys_context(’userenv’,’sid’)

在你的toad会话和Jasper报告中运行它并比较结果。