【问题标题】:Why ssrs 2005 report takes long time for execution when using parameter?为什么使用参数时ssrs 2005报告需要很长时间才能执行?
【发布时间】:2012-07-31 23:10:43
【问题描述】:

我正在尝试执行一份 SSRS 2005 报告。该报告采用一个参数。 如果我不使用参数并直接写入值,那么它将在 10 秒内运行。例如。

Select * from table1 where id = 122

如果我使用参数,那么它需要很长时间,比如 10 到 15 分钟

Select * from table1 where id = @id

我不知道为什么会这样。

提前致谢。

【问题讨论】:

  • 您是否使用 SP 执行查询?
  • 不,我没有使用 SP。我刚刚在 ssrs 2005 报告中添加了一个参数,然后我在报告中的查询中使用该参数。

标签: sql-server reporting-services reportingservices-2005


【解决方案1】:

不可能回答所问的问题:只有有信息来确定为什么事情表现不佳。

但是,我们可以做的是回答“如何调查 SSRS 性能问题?”这个问题。到目前为止,我发现的最好的工具之一是使用 ReportServer 目录数据库中的ExecutionLog2 View。在您的情况下,要查看的重要列:

  • TimeDataRetrieval,用于连接到数据源和检索数据行所花费的时间
  • TimeProcessing,用于将数据行转换为报告所花费的时间
  • TimeRendering,用于创建最终输出(pdf、html、excel 等)所花费的时间

这将为您提供进一步调查的起点。最有可能(根据您的描述)我猜问题出在第一位。一个合适的后续步骤是分析 SSRS 执行的查询,可能使用执行计划。

【讨论】:

  • 非常感谢您的回复。
  • 根据您的第一点,为什么当我在查询中使用直接值时这一点不适用 where 子句(如“id = 120”)通过在查询中使用直接值使其执行非常快。但是当我使用 Parameter 将此值发送到查询时,它会非常慢。我认为问题可能出在参数中,否则当我直接在查询中提供值时,查询在其他情况下也会变慢。
  • 我想添加更多东西......我的查询非常大,它还包含 7 个大子查询。如果我删除这些子查询,那么通过参数或直接值传递值不会影响查询性能。
  • 这可能意味着问题 is 在您的查询中。您是否尝试过通过查询分析器/执行计划运行它?您是否按照我的建议检查了 ExecutionLog2 的结果?让我们知道您最终是如何解决问题的(请注意,如果我的回答不够,您可以回答自己的问题)。
【解决方案2】:

1) 尝试用连接逻辑替换您的子查询。尽量做到最好。我知道很多时候子查询感觉更合乎逻辑,因为当我们在宏观视图中思考[这个结果集]得到[那个结果集]时,它使问题流过。 2)也可以放索引。而且由于它的 int 会更快。

【讨论】:

    猜你喜欢
    • 2012-12-03
    • 2011-03-14
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-08
    相关资源
    最近更新 更多