SSRS-OutOf MemoryException-可显示的行数是否有限制

问题描述 投票:4回答:3

我创建了一个rdl文档,该文档指向一个返回90 000行的proc,但我遇到了内存不足的异常。报表项目可以处理的行数是否有限制?

[当前,我已更改驱动报告的过程以仅选择前90000。我的规范是要能够创建具有12万行的报告。我的报告是一个矩阵。

我发誓上周我生成了一个报告,其中包含106800行,但现在突然之间我无法。

我已经编写了渲染扩展,这是我进入代码时例外的一部分。

eInfo:2/12/2009 12:03:53PM prairieFyre.ReportActions.RenderReport:呈现报告时出错Microsoft.Reporting.WinForms.LocalProcessingException:错误发生在本地报告处理期间。 ->Microsoft.ReportingServices.ReportProcessing.ReportProcessingException:报表处理中发生意外错误。 ->System.OutOfMemoryException:类型的异常抛出“ System.OutOfMemoryException”。在System.IO.MemoryStream.set_Capacity(Int32值)位于System.IO.MemoryStream.EnsureCapacity(Int32值)位于System.IO.MemoryStream.Write(Byte []缓冲区,Int32偏移量,Int32计数)在System.IO.BinaryWriter.Write(String value)在Microsoft.ReportingServices.ReportProcessing.Persistence.IntermediateFormatWriter.ReportServerBinaryWriter.WriteString(StringstringValue)....

reporting-services matrix max rows rdl
3个回答
4
投票

除了您的硬件配置,我认为没有限制。如果在32位计算机上,正在处理该工作进程的工作进程的内存不足2 GB,则在考虑内核模式内存时,可能接近1 GB。如果要像这样提供大型报告,则可能需要在包装盒上安装至少4GB或更多内存的64位设置。此设置将允许工作进程分配2个以上的可用内存来完成这些大请求,而不会出现问题。

如果没有硬件升级的选项,您也可以考虑使用这些替代方法。

  • 您说该报告是矩阵报告,所以听起来您没有向用户显示所有数据,而是对其进行了汇总。您可以在数据库中预先汇总一些数据,然后仅使用SSRS进行显示吗?

  • 由于报告不过是一个XML文件,因此可以从SQL Server或使用某些脚本或过程来构建报告XML字符串。这可能是很多工作。


3
投票

堆栈表示用于存储报告执行结果的MemoryStream不能增加(增加)它的大小。

这通常是由地址空间碎片引起的,通常无法通过添加硬件来解决。

Microsoft ReportViewer可以处理的数据量有限,因为它旨在将中间报表执行结果存储在MemoryStream中,不幸的是,该内存流需要连续增长的连续可用地址空间,而在通常的.NET应用程序(2GB地址空间)不大于256MB,并且通常小于该值。

例如,在此流中,存储了所有字段值,聚合值,表达式和图像,因此大小直接取决于添加到报表中的数据集的大小。

要分析.NET应用程序的地址空间和对象,最好使用WinDBG(Windows调试工具)和SOS扩展进行调试。

分析地址分段的有用命令是:

  • !address -summary
  • lm
  • !EEHeap -gc
  • !DumpHeap -stat

在这种特定情况下,可以通过预先汇总数据源中已经存在的值而不是矩阵中的值来减少数据量。

知识库文章“使用SQL Server Reporting Services时可能会收到'System.OutOfMemoryException'错误消息” [1]提供了更多提示。

[1]:使用SQL Server Reporting Services时出现http://support.microsoft.com/kb/909678“ System.OutOfMemoryException”错误消息


© www.soinside.com 2019 - 2024. All rights reserved.