【问题标题】:How to improve DB load produced by SSRS reports如何改善 SSRS 报告产生的数据库负载
【发布时间】:2014-04-29 14:37:51
【问题描述】:

我想知道是否有可能减少 SSRS 报告产生的数据库负载。 我有一份由几个子报告组成的 SSRS 报告。他们每个人都至少有一个数据库查询。

  1. 它们中的许多查询相同的数据,因为大多数子报表都有一种填充动态数据的模板标题。
  2. 根据查询是否返回任何数据显示一些子报告。所以一旦查询到数据就决定是否显示报表。然后报表本身会查询相同的数据以将其显示在表格中

总的来说,我可以说我需要一种机制来将查询的数据库数据从父报表传递到子报表。父报表将查询一些数据,它将遍历数据集,并且对于每个数据集,它将显示一个子报表,将当前数据集作为参数传递。

我找不到传递数据集(数据行)的机制。这就是为什么我通过传递一种数据集 ID 来显示子报告。子报表本身再次查询相同的数据,按传递的数据集 ID 过滤并仅显示相关数据集。这会对数据库造成巨大的负载。

提前谢谢你!

【问题讨论】:

  • 您需要分析具体的查询并进行相应的优化。如果您总共运行了 7 个查询,请分析所有查询,找出导致“数据库负载”的原因并修复它。如果您对主/详细类型查询有疑虑,您需要将报表转换为只运行一个查询,但这可能是不可能的(或更快)。请注意,如果您重复运行相同的查询(即使使用不同的参数),无论如何您都会通过缓存等获得一些效率。

标签: performance reporting-services ssrs-2008


【解决方案1】:

您描述的设计是相当标准的,我不认为它会导致“数据库上的巨大负载”。我预计运行 10 个过滤的子报告的数据库负载仅比运行涵盖相同 10 个项目的一份报告多 10-20%。

我会在“数据集 ID”列上添加一个索引,以提高过滤器的效率。

【讨论】:

  • 谢谢迈克。数据库查询非常高效,但问题是它们被执行了多次(对于几个子报告)。 DB同时被前端代码使用,恐怕在生成报告的过程中前端的响应能力会下降。
  • 所以玻璃杯实际上可能是半满的,您可能没有任何问题,只是担心:-) 无论如何,为了减少您的 #2 场景的影响,我将从父报告中删除这些数据集。在子报告中,如果数据集不返回任何行,我将隐藏所有表等。
【解决方案2】:

根据您的子报表的复杂性,使用查找功能可能是一个可以接受的更快的解决方案。之前关于隐藏没有数据的行或子报表的评论也适用于此。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-17
    • 1970-01-01
    • 2013-04-17
    相关资源
    最近更新 更多