简单报告的内存不足异常

时间:2013-01-26 16:47:26

标签: ssrs-2008 reporting-services reportingservices-2005

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

报告中未进行聚合或数据处理。有大约50列和19个报告参数。我只需要在报告中显示这50列(无枢轴)。

通常需要大约5分钟才能在我们的开发服务器上呈现此报告(非高峰时段)。与我们的生产服务器的情况相同,但是用户正在获得很多“内存不足”异常,并且还没有使用报告参数标准(这是我从用户那里得到的抱怨)。

我可以在本地过滤条件而不会出现任何问题,尽管渲染需要很长时间。

  1. 为什么渲染报告需要这么长时间,即使报告很简单?

  2. 当我在VS 2008上点击F5时报告运行正常,但是当我点击“预览”标签时,我不时会出现内存异常。

  3. 列的某些名称中包含“#”字符。如果我在报告中包含这样的列,则会抛出“内存不足异常”(特别是在预览模式下)。这有什么道理:SSRS不像列号“#”吗?例如。我的专栏名称是“KLN#”。

  4. 我在桌面上创建了一个非聚集索引,但这对我没什么帮助。

  5. 在预览模式下运行报告与在VS 2008上击中F5之间的区别是什么?即使花了5分钟,我按F5也没关系,但预览模式有问题。

  6. 重新设计的空间不大(因为这是一个简单的报告),也许我只能删除报告参数。

    任何建议都将不胜感激。

4 个答案:

答案 0 :(得分:1)

  

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

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

  1. 检索数据。
  2. 通过合并报告和数据来创建内部模型。
  3. 将报告呈现为适当的格式(预览,html,xls等)
  4. 您可以查看ExecutionLog2 View以查看每个步骤需要多长时间。步骤1可能已经相当快(秒),因此添加的索引不会解决瓶颈问题。可能第2步和第3步需要花费很多时间,并且需要大量的RAM。

      

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

    据我所知,这应该不是问题。删除该列的可能性就足够了以使报告再次可运行。

      

    重新设计并不多(因为它是一个直接的报告),除了我可以删除报告参数。

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

    <强>解决方法:

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

    <强>备选方案:

    • 创建一个从数据库中读取并输出Excel的小型自定义应用程序。
    • 使用SSIS,我认为它更适合此类任务(数据转换和迁移)。
    • 重新考虑您的设置。您尚未提及报告的上下文,但也许您有XY Problem。也许您的用户想要整个报告,但只需要几个关键行,或者他们只能将其用作备份机制(为此有更好的替代方案),或者......

答案 1 :(得分:1)

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

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

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

希望这会对其他人有所帮助,因为如果您搜索SSRS内存异常,此页面仍然是最重要的帖子之一。

答案 2 :(得分:0)

尝试增加你的内存,请看这篇文章中的类似错误:

Need SSRS matrix to show more than 400k records

答案 3 :(得分:0)

我们遇到了类似的情况,如果可能的话,将#34;在一页上保持在一起&#34; Tablix属性/常规/分页符选项中的选项关闭,它工作正常。