【问题标题】:SSRS Report with Oracle database performance problems带有 Oracle 数据库性能问题的 SSRS 报告
【发布时间】:2012-02-24 19:02:43
【问题描述】:

我正在使用从 Oracle 数据库中选择数据的 SQL Server Reporting Services 创建报告。该报告正在运行,但需要很长时间才能生成(约 75 秒)。我的报告中有以下非常简单的查询:

SELECT  
(SELECT   COUNT(*)  
   FROM   CALL  
  WHERE   trunc(start_time) >= :Begin_Date 
    AND   trunc(finish_time) <=  :End_Date) AS total_calls,
(SELECT   COUNT(*)  
   FROM   CALL  
  WHERE   DISCONNECT = 'T' 
    AND   trunc(start_time) >= :Begin_Date 
    AND   trunc(finish_time) <=  :End_Date) AS transfered_calls,
(SELECT   COUNT(*)  
   FROM   CALL  
  WHERE   DISCONNECT = 'H' 
    AND   trunc(start_time) >=  :Begin_Date 
    AND   trunc(finish_time) <=  :End_Date) AS hangups
FROM DUAL

现在我可以使用 SQLPlus* 在 Oracle 中执行这个查询(当然要填写日期),它会在大约 8 秒内执行。当我尝试在 SSRS 报告中执行相同的查询时,生成需要 75 秒。我担心的是我需要添加更多查询来完成报告,如果生成这个基本版本的报告需要很长时间,那么完成的报告将无法工作。如何提高报表的性能?有什么想法吗?

提前感谢您的帮助。

【问题讨论】:

    标签: oracle reporting-services


    【解决方案1】:

    您当然可以通过只点击一次CALL 表来提高性能

    SELECT COUNT(*) total_calls,
           SUM(CASE WHEN disconnect = 'T'
                    THEN 1
                    ELSE 0
                 END) transferred_calls,
           SUM(CASE WHEN disconnect = 'H'
                    THEN 1
                    ELSE 0
                  END) hangups
      FROM call
     WHERE trunc(start_time)  >= :Begin_Date
       AND trunc(finish_time) <= :End_Date
    

    此外,TRUNC(start_time)TRUNC(finish_time) 上的基于函数的索引可能会有所帮助(假设您传入的参数将被考虑的行集限制为表中相对较小的行子集) .

    SSRS 和 SQL*Plus 的性能差异,查询计划是一样的吗?您能否跟踪 SSRS 报告以查看它在等待什么?

    【讨论】:

    • +1 我会先使用这个解决方案。这很简单,您应该如何设计查询。如果您仍然遇到性能问题,请开始查看其他系统问题(如索引),并可能创建视图或存储过程。
    • +1 如果表在 start_time 和 end_time 上已有索引,那么如果 where 子句修改为 where start_time &gt;= :Begin_Date and finish time &lt; to_date(:End_Date)+1,查询应该能够使用它。
    【解决方案2】:

    几个建议。首先确保您的表已正确编入索引,以便您可以使用 Oracle Optimizer。当我做这些类型的报告时,我发现如果我创建一个视图来获取我需要的数据,它会运行得更好。你也可以创建一个存储过程来做同样的事情。我已经使用了这两种方法,并且从中获得了很好的效果。此外,在 SELECT 子句中使用嵌入式选择语句绝不是一个好主意。如果您能找到删除这些的方法(例如调用函数),您可能会看到一些额外的性能提升。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多