当您使用 SQL Server 报告服务时,您可能会收到"System.OutOfMemoryException"错误消息

文章翻译 文章翻译
文章编号: 909678 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

症状

当您使用的是 Microsoft SQL Server 2000 报表服务,或用 Microsoft SQL Server 2005 报告服务时,您可能会收到以下错误消息:

在该报表服务器上出现内部错误。
请参阅错误日志以了解更多的详细信息。(rsInternalError)获取联机帮助
类型的 System.OutOfMemoryException 引发异常。
此外,您可能会注意到在 SQL Server Reporting Services 日志文件中记录以下错误消息或日志突然结束:

System.OutOfMemoryException: 类型的 System.OutOfMemoryException 引发异常。
您可能会注意到在 Microsoft Windows 应用程序日志中记录是以下事件之一:

事件 1


aspnet_wp.exe (PID: <PIDNumber>) 被回收,原因是内存消耗超过了 <SizeLimit> MB (<Percentage> 可用 RAM 的百分比)。

事件 2


进程服务应用程序池 DefaultAppPool 遇到致命的通信错误的万维网发布服务。进程 id 是"9132"。数据字段中包含错误号。

与一个或多个以下症状可能会发生此问题:
  • 当试图显示报表时报表永远不会将已完成。
  • 报表似乎停止响应。
  • 当试图显示报表时显示一个空白屏幕。
  • 您会收到以下错误消息:

    基础连接已关闭
  • 未传递的订阅。

原因

出现此问题的原因是该计算机没有足够的内存来完成所请求的操作。

SQL Server 2000 报表服务的限制会导致报告处理绑定的内存的某些部分。例如对于查询结果处理和对象模型呈现是绑定的内存。

计算机没有足够的内存来完成所请求的操作,一种或多种以下条件:
  • 报表是太大或太复杂。
  • 其他正在运行的进程的开销是很高。
  • 物理内存的计算机来说过小。
在两个阶段中处理报表。两个阶段都执行和呈现。在执行阶段或在呈现阶段,则可能出现此问题。

如果在执行阶段,则会出现此问题,出现此问题最可能的原因太多的内存占用的查询结果中返回的数据。此外,下列因素会影响执行阶段的内存消耗:
  • 分组
  • 筛选
  • 聚合
  • 排序
  • 自定义代码
如果在呈现阶段会出现此问题,原因与该报表显示哪些信息并报告显示信息的方式。例如对于下列因素会影响在呈现阶段的内存消耗:
  • 数量和类型的控件
  • 在控件之间关系
  • 格式设置
  • 显示的数据量
报告处理器组件有关的详细信息,请访问下面的 Microsoft 开发人员网络 (MSDN) 的网站:
http://msdn2.microsoft.com/en-us/library/aa179471(SQL.80).aspx

解决方案

若要解决此问题,使用下列方法之一。

方法 1

将添加到该计算机上有足够的物理内存。

注意如果您超过 2 千兆字节 (GB) 的内存可以启用该 / 3gb 切换在 Boot.ini 文件中为更好的性能。 有关如何在 SQL Server 中使用了 / 3gb 开关的详细信息单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
274750如何配置要使用的物理内存的 more than 2 GB SQL Server

方法 2

计划在 off-hours 内存限制时较低时运行的报表。

方法 3

调整 MemoryLimit 相应地设置。

注意当您呈现通过报告服务 Web 报表服务,报告服务 Web 服务获取 MemoryLimit 设置 Machine.config 文件中。但是,计划的报表呈现报表服务器的 Windows 服务。报表服务器 Windows 服务从 RSReportServer.config 文件获取 MemoryLimit 设置。

有关 MemoryLimit 设置的详细信息,请参阅"更多信息"部分。

方法 4

升级到 64 位版本的 Microsoft SQL Server 2005 报告服务。

方法 5

重新设计报表。若要执行此操作使用下列方法之一。

方法 A

重新设计报告查询。可以通过以下方式重新设计报表查询减少内存占用:
  • 在报表查询中返回更少的数据。
  • 对报告查询的 WHERE 子句中使用更好的限制。
  • 移动到数据源的复杂的聚合。

方法 B

将报表导出到另一种格式。您可以减少内存占用量来显示报表使用不同的格式。下表列出了几种导出格式到最少的内存消耗大多数的内存消耗的顺序。
收起该表格展开该表格
格式说明
Microsoft Excel呈现在 Excel 中的报表
图像 (TIFF)将报表呈现为静态图像面向页的格式
PDF呈现报表中可移植文档格式 (PDF)
HTML呈现到浏览器在 HTML 报表
CSV以逗号分隔的格式 ; 呈现报表中查看工具与 CSV 文件格式相关联的打开报表
XML呈现报表中 XML,则报表将在浏览器中打开
注意如果不应用 XSLT 转换,则此格式将占用较少的内存比所消耗的 CSV 格式。

方法 C

简化报表设计。您可以通过以下方式简化报表设计减少内存占用:
  • 在报表中包含较少的数据区域或控件。
  • 若要显示详细信息使用钻取报表。
此外,如果报告的目的是只是数据集合,您可以使用其他 Microsoft 产品以获得更好的性能。例如对于您可以使用数据转换服务 (DTS) 或 Microsoft SQL Server 2005 集成服务。

示例

下面的示例演示如何解决此问题。 请考虑下面的示例:
  • PDF 格式和 Excel 格式,则无法呈现返回 160 页面在报告管理器中的报表。当使用一个 8.5 × 11 英寸页面尺寸时,报表可能远远超过 250 页。
  • 报表的数据源返回到该报表服务器 500 兆字节 (MB) 的数据。通常,SQL Server 2000 报表服务需要两到三倍的数据集使用的内存量。 因此,SQL Server 2000 报表服务要求几乎 1.5 GB 的内存呈现该报表。
若要解决此问题在此示例中,重新设计报表,以使该报表显示仅为一组有限的筛选器值的汇总数据。 此外,请确保聚合发生在提取报表数据的数据库查询和报表本身中不是聚合。 这些方法有助于大大减少被返回到该报表服务器的数据量。因此,成功和更快地呈现该报表。

更多信息

您在使用 SQL Server 2000 报表服务时,您可能会遇到与内存相关的问题,由下面的错误条件之一引起的:
  • 将引发 System.OutOfMemoryException 错误。
  • 达到内存限制。
错误条件之间的主要区别是的级别的错误条件捕获并处理。

System.OutOfMemoryException 错误是一个操作从系统请求更多的内存和系统不能提供内存时由 SQL Server 2000 报表服务引发的错误。时将发生此错误以不安全的方式将 SQL Server 2000 报表服务关闭进程。关闭是不安全的因为 SQL Server 2000 报表服务共享之间运行请求的资源。因此,SQL Server 2000 报表服务不能保证数据是为所有请求仍然安全。

内存限制是一组的设置,以帮助保护免受可能导致不稳定的条件的系统。 例如对于的内存限制有助于防止一个报表服务器处理从使用太多内存。通过 MemoryLimit 设置和通过 MaximumMemoryLimit 设置 RSReportServer.config 文件中定义的指定内存限制。达到内存限制是内存不足,无法实际运行 SQL Server 2000 报表服务之前,由 Microsoft.net 框架将引发错误。

您可以呈现报表从一个 Web 站点或计划的任务。因此,SQL Server 2000 报表服务中的两种不同环境中可能会发生错误条件。在环境如下所示:
  • 报告服务 Web 服务
  • 报表服务器的 Windows 服务
因此,下列错误条件和环境的组合存在。

报告服务 Web 服务和 System.OutOfMemoryException 错误

异常消息和 $ 关机消息与以下消息类似的记录中 SQL Server 2000 Reporting Services 日志文件 (ReportServerService_ <timestamp>.log):

w3wp! 库! 1b3c! 07/11/2005年-10:38:00:: e 错误: 找到 System.OutOfMemoryException 异常: Microsoft.ReportingServices.ReportProcessing.WrapperReportRenderingException: 类型 Microsoft.ReportingServices.ReportRendering.ReportRenderingException 引发的异常。---> Microsoft.ReportingServices.ReportRendering.ReportRenderingException: 类型 Microsoft.ReportingServices.ReportRendering.ReportRenderingException 引发的异常。---> System.OutOfMemoryException: 类型 System.OutOfMemoryException 引发的异常。

w3wp! 库! 1b3c! 07/11/2005年-10:38:00:: e 错误: 终止工作进程
注意默认 ReportServerService_ <timestamp>.log 文件位于以下位置:
\Microsoft SQL Server\ <Instance of SQL Server> \Reporting Services\LogFiles
此外,在应用程序日志中记录类似于下面的事件的事件:


事件类型: 警告
事件源: W3SVC
事件类别: 无
事件 ID: 1011年
日期: Date
时间: Time
用户: 不适用
计算机: ComputerName
说明:
提供服务应用程序池 DefaultAppPool 一个进程遇到致命的通信错误的万维网发布服务。进程 id 是"9132"。数据字段中包含错误号。

SQL Server 2000 报表服务不能正常处理此错误。报告服务 Web 服务捕获该异常,并关闭该进程。您必须重新提交请求。

若要解决此问题,您可以向系统添加更多的物理内存或减少其他进程的内存消耗。

理想情况下,您可以调整 MemoryLimit 设置或 $ Microsoft Internet Information Services (IIS) 6.0 的 应用程序池 设置,以便捕获到错误之前出现内存不足情况。因此,进程被涉及多个正常。您必须尝试在的设置,不能保证您将始终达到内存限制第一次。

报告服务 Web 服务和内存限制

在 Windows 事件日志和 SQL Server 2000 Reporting Services 日志文件中记录了消息。Reporting Services Web 服务日志文件表示进程正在关闭。但是,SQL Server 2000 报表服务不控制关机,并且不能记录关机有关的错误信息。

您可能会注意到在应用程序日志中记录是以下事件之一:

事件 1


aspnet_wp.exe (PID: <PIDNumber>) 被回收,原因是内存消耗超过了 <SizeLimit> MB (<Percentage> 可用 RAM 的百分比)。

事件 2


具有进程 id 为"2420"服务应用程序池 DefaultAppPool 的工作进程已经请求回收,因为它已经达到其虚拟内存限制。

达到内存限制是 Microsoft ASP.NET 或 IIS 6.0 处理此错误,并关闭报告服务 Web 服务。内存限制所有被指定通过 ASP.NET 或 IIS 6.0 和不受 SQL Server 2000 报表服务。

您可以更改该 <processmodel>下的该内存限制 Machine.config 文件中的部分。

注意如果您在纯模式下在 Machine.config 文件未使用运行 IIS 6.0。内存限制被受中 IIS 6.0 应用程序池的属性。

有关在 ASP.NET 和 IIS 6.0 中的内存配置的详细信息,请访问以下 MSDN 网站:

报表服务器的 Windows 服务和 System.OutOfMemoryException 错误

报告未发送到一个文件共享或发送给已订阅的收件人。当计划呈现过程会自动重新启动时,过程将尝试恢复过程的一部分再次运行相同的订阅。在 $ SQL Server 2000 Reporting Services 日志文件中记录与以下错误消息类似的错误消息:

ReportingServicesService! 库! 618! 7/9/2003年-16: 06: 01:: 状态: 错误: 类型 System.OutOfMemoryException 引发的异常。
ReportingServicesService! 通知! 618! 7/9/2003年-16: 06: 01:: 传递提供程序引发的错误: System.OutOfMemoryException: 类型 System.OutOfMemoryException 引发的异常。
ReportingServicesService! 通知! 618! 7/9/2003年-16: 06: 01:: 通知 380e6cd2-3e3d-4549-9ed5-9fb6b42266b6 完成。成功: False、 状态: 错误: 类型 System.OutOfMemoryException 引发的异常,DeliveryExtension: 报表服务器电子邮件、 报表: 发票,尝试 0
ReportingServicesService! dbpolling! 618! 7/9/2003年-16: 06: 01:: NotificationPolling 完成处理项目 380e6cd2-3e3d-4549-9ed5-9fb6b42266b6
ReportingServicesService! servicecontroller! 568! 7/9/2003年-16: 09: 30:: i: 所请求的内存限制应用程序域回收
ReportingServicesService! servicecontroller! 568! 7/9/2003年-16: 09: 30:: i: 回收从默认域服务
ReportingServicesService! dbpolling! 568! 7/9/2003年-16: 9: 30:: EventPolling 轮询服务已停止
ReportingServicesService! dbpolling! 87 c! 7/9/2003年-16: 09: 30:: EventPolling 检测信号线程退出的停止。
ReportingServicesService! dbpolling! 568! 7/9/2003年-16: 9: 30:: NotificationPolling 轮询服务已停止
ReportingServicesService! dbpolling! 880! 7/9/2003年-16: 09: 30:: NotificationPolling 检测信号线程退出停止的。
ReportingServicesService! dbpolling! 568! 7/9/2003年-16: 9: 30:: SchedulePolling 轮询服务已停止
报表服务器的 Windows 服务捕获该异常,并关闭该进程。这不是一个正常的过程,在 $ 进程中的其他任何请求都将丢失。

您不能配置任何设置,以避免此问题。通过在计算机上的内存量和其他进程的内存消耗量,此问题会受到影响。

若要解决此问题,您可以向计算机添加更多的物理内存或减少其他进程的内存消耗。

报表服务器的 Windows 服务和内存限制

报告未发送到一个文件共享或发送给已订阅的收件人。订阅的 状态 属性具有"线程中止"值。错误 SQL Server 2000 Reporting Services 日志文件中记录与以下错误消息类似的消息:

ReportingServicesService! reportrendering! 17a8! 09/28/2005年-16: 10: 12:: e 错误: 引发 Microsoft.ReportingServices.ReportProcessing.WrapperReportRenderingException: 类型 Microsoft.ReportingServices.ReportRendering.ReportRenderingException 引发的异常,; 信息: Microsoft.ReportingServices.ReportProcessing.WrapperReportRenderingException: 类型 Microsoft.ReportingServices.ReportRendering.ReportRenderingException 引发的异常。---> Microsoft.ReportingServices.ReportRendering.ReportRenderingException: 类型 Microsoft.ReportingServices.ReportRendering.ReportRenderingException 引发的异常。---> System.Threading.ThreadAbortException: 线程已被中止。
ReportingServicesService! runningjobs! 17a8! 09/28/2005年-16: 10: 12:: i: CancelableJobExecution.Execute 捕获到某些其他线程中止异常
ReportingServicesService! 库! 17a8! 09/28/2005年-16: 10: 12:: i: 初始化 EnableExecutionLogging 为 True 为在服务器系统属性中指定。
ReportingServicesService! runningjobs! 1810年! 09/28/2005年-16: 10: 12:: i: CancelableJobExecution.Execute 捕获到某些其他线程中止异常
ReportingServicesService! 库! 1810年! 09/28/2005年-16: 10: 12:: i: 初始化 EnableExecutionLogging 为 True 为在服务器系统属性中指定。
ReportingServicesService! dbpolling! 1810年! 09/28/2005年-16: 10: 12:: 无法再处理项目 6e786bb5 3e4d 462a 92 fc-2942e6aec007 NotificationPolling 将被重新排队
ReportingServicesService! dbpolling! 1810年! 09/28/2005年-16: 10: 12:: 队列工作线程,发现未处理的异常: System.Threading.ThreadAbortException: 线程已被中止。
在 Microsoft.ReportingServices.Library.NotificationQueueWorker.HandleNotification(QueueItem item)
在 Microsoft.ReportingServices.Library.NotificationQueueWorker.QueueWorker(QueueItem item)
在 Microsoft.ReportingServices.Library.QueuePollWorker.WorkItemStart (对象状态)
注意这些消息被跟在日志文件突然结束。

报表服务器的 Windows 服务会尝试完成现有的请求。此外,报表服务器的 Windows 服务监视其自己的配置设置,以确保所请求的操作不会超过内存限制。如果所请求的操作不会超过内存限制,报表服务器的 Windows 服务停止的进程。报表服务器 Windows 服务都自动将失败的作业启动任务列表中。报表服务器的 Windows 服务重新启动,报表服务器的 Windows 服务会尝试再次运行该作业。

RSReportServer.config 文件中的两个设置会影响内存配置。特定的项是 MaximumMemoryLimit 设置和 $ 在此 <service>MemoryLimit 设置 标记。

这些值表示物理内存的百分比。如果现有请求在内存消耗达到由 MemoryLimit 设置指定的百分比,报表服务器的 Windows 服务将停止采取额外的请求。但是,继续当前正在进行的请求。 释放内存后由 MemoryLimit 设置指定的百分比小于再次接受新请求。

如果现有请求在内存消耗达到由 MaximumMemoryLimit 设置指定的百分比,报表服务器应用程序域将被终止。

这些设置模仿内存限制,在该 <processmodel>下 Machine.config 文件中节和有效的工作方式相同。这些设置同样适用报告服务 Web 服务和报告服务器 Windows 服务之间的一致性。

参考

详细的信息,请参阅下列主题中 SQL Server 联机图书:
  • 如何添加钻取报表链接 (报表设计器)
  • 导出报告
  • RSReportServer 配置文件
  • 回收报表服务器应用程序域

属性

文章编号: 909678 - 最后修改: 2009年11月24日 - 修订: 3.0
这篇文章中的信息适用于:
  • Microsoft SQL Server 2000 Reporting Services
  • Microsoft SQL Server 2005 Reporting Services
关键字:?
kbmt kbexpertiseadvanced kbprb KB909678 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 909678
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com