3

我正在尝试运行 SSRS 报告。这是一个简单的报告,只是为了呈现大约 80K 记录的表中的数据。

报表中不进行聚合或数据处理。大约有 50 列以及 19 个报告参数。我只需在报告中显示这 50 列(无数据透视表)。

通常在我们的开发服务器上呈现此报告大约需要 5 分钟(非高峰时段)。我们的生产服务器也是如此,但是用户经常遇到“内存不足”异常,并且报告参数标准没有被使用(这是我从用户那里得到的抱怨)。

尽管渲染需要很长时间,但我可以毫无问题地在本地过滤条件。

  1. 即使报告很简单,为什么要花这么长时间来呈现报告?

  2. 当我在 VS 2008 上按 F5 时,报告运行良好,但是当我点击“预览”选项卡时,有时会出现内存不足的异常。

  3. 某些列的名称带有“#”字符。如果我在报告中包含此类列,则会引发“内存不足异常”(尤其是在预览模式下)。这是真的吗:SSRS 不喜欢带有“#”的列名吗?例如,我的列名是“KLN#”。

  4. 我在表上创建了一个非聚集索引,但这对我没有多大帮助。

  5. 在预览模式下运行报告与在 VS 2008 上按 F5 有什么区别?按F5虽然需要5分钟也没问题,但是预览模式有问题。

重新设计的空间不大(因为它是一个直截了当的报告),也许我只能删除报告参数。

任何建议将不胜感激。

4

4 回答 4

3

除了已经发布的答案以及关于报表设计器或报表管理器中的预览问题之外,还有另一种可能的解决方案:避免在第一个报表页面上显示过多数据!

它可以通过分页到小记录量来完成,即通过带有分页符的自定义组或有时自动(参见 done_merson 的答案)或通过添加简单的封面页来完成。这些解决方案在开发阶段特别有用,如果您打算将报告结果呈现为 Excel 或 PDF。

我有一个类似的情况,内存不足异常,并且从不返回带有简单报告及其包含大约 70k 记录的数据集的报告。该查询在大约 1-2 分钟内执行,但报表设计器和我们的开发 SSRS 2008R2 服务器(报表管理器)都无法显示生成的报表预览。最后,我怀疑 HTML 预览是瓶颈,并通过添加带有简单文本框的封面来避免它。下一个报表执行大约需要 2 分钟,并成功显示了带有封面的 HTML 预览。将完整的结果呈现到 Excel 只需要 30 秒。

希望这对其他人有所帮助,因为如果您搜索 SSRS 内存不足异常,此页面仍然是热门帖子之一。

于 2016-05-10T14:58:25.610 回答
1

为什么渲染需要这么长时间...?
我在表上创建了一个非聚集索引,但这对我没有多大帮助。

因为(AFAIK)SSRS 将在呈现之前构建报表的内存模型。知道 SSRS 将采取三个步骤来创建报告:

  1. 检索数据。
  2. 通过组合报告和数据来创建内部模型。
  3. 将报告呈现为适当的格式(预览、html、xls 等)

您可以检查ExecutionLog2 视图以查看每个步骤需要多少时间。第 1 步可能已经相当快(几秒钟),所以添加的索引并没有解决瓶颈。可能第 2 步和第 3 步会花费大量时间,并且需要大量 RAM。

SSRS 不喜欢带有#?? 的列名 我的专栏名称是 KLN#。

据我所知,这应该不是问题。更有可能删除该列足以使报告再次运行。

没有什么需要重新设计的(因为它是一个直接的报告),例如我可以删除报告参数。

SSRS 并不是解决此问题的正确工具。因此,您的问题没有真正的“解决方案”,只有替代方案和解决方法。

解决方法:

  • 正如@glh 在他的回答中提到的那样,为 SSRS 提供更多 RAM 可能“有帮助”。
  • 要求用户使用参数过滤数据(即不允许用户选择所有这些行,只选择他需要的行)。
  • 在安静的时刻(当有足够的可用 RAM 时)安排报告并缓存报告

备择方案:

  • 创建一个从数据库读取并输出 Excel 的小型自定义应用程序。
  • 使用SSIS,它(我认为)更适合这种任务(数据转换和迁移)。
  • 重新考虑您的设置。你没有提到你的报告的上下文,但也许你有一个XY 问题。也许您的用户想要整个报告但只需要几个关键行,或者他们只将其用作备份机制(有更好的选择),或者......
于 2013-01-27T15:14:29.213 回答
0

尝试增加你的内存,看到这个帖子类似的错误:

需要 SSRS 矩阵来显示超过 40 万条记录

于 2013-01-27T12:01:07.983 回答
0

我们刚刚遇到了类似的情况,并将 Tablix 属性/常规/分页选项中的“如果可能的话保持在一页上”选项设置为关闭,并且效果很好。

于 2013-10-28T21:23:14.267 回答