SQLServer出现System.OutOfMemoryException异常的解决方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SQLServer出现System.OutOfMemoryException异常的解
决⽅法
今天在⽤SQL Server 2008执⾏⼀个SQL脚本⽂件时,⽼是出现引发类型为“System.OutOfMemoryException”的异常错误,脚本明明是从SQL Server 2008导出的,应该不会出错,研究了好久问题才得以解决。
出现这个错误的主要原因是由于SQL脚本⽂件太⼤,估计超过了100M了,解决⽅法就是把脚本⽂件分成⼏个脚本⽂件,分别去执⾏即可。
来⾃微软官⽅的解决⽅案:
原因:
因为计算机没有⾜够的内存来完成请求的操作,则会出现此问题。
在 SQL Server 2000 Reporting Services 的限制会导致内存绑定的处理报告的某些部分。
例如,查询结果处理和对象模型呈现受限于内存。
计算机没有⾜够的内存来完成请求的操作在⼀个或多个下列条件都为真:
1.⼀个报告是太⼤或太复杂。
2.其他正在运⾏的进程的费⽤是⾮常⾼的。
3.计算机的物理内存是太⼩。
处理报表,则分两个阶段。
两个阶段是执⾏和呈现。
在执⾏阶段期间或在呈现阶段,会出现此问题。
如果在执⾏阶段中,会出现此问题,此问题很可能是因为太多的内存消耗在查询结果中返回的数据。
此外,下列因素会影响内存消耗,在执⾏阶段:
1.分组
2.筛选
3.聚合
4.排序
5.⾃定义代码
如果在呈现阶段中会发⽣此问题,原因被与该报表显⽰何种信息以及报表显⽰信息的⽅式。
1.数量和类型的控件
2.这些控件之间的关系
3.格式设置
4.显⽰的数据量
解决⽅案:
若要解决此问题,请使⽤下列⽅法之⼀。
⽅法 1
向计算机中添加⾜够的物理内存。
注意如果您超过 2 千兆字节 (GB) 的内存可以启⽤该 / 3gb 切换在 Boot.ini ⽂件中为更好的性能。
有关如何在 SQL Server 中使⽤了 / 3gb 开关的详细信息单击下⾯的⽂章编号,以查看 Microsoft 知识库中相应的⽂章:
274750如何配置 SQL Server 使⽤ 2 GB 以上物理内存
⽅法 2
将报告计划安排为在内存限制时较低的⾮⾼峰时段运⾏。
⽅法 3
调整所在进⾏相应设置。
注意:呈现时通过报告服务 Web 服务的报告,该报告服务 Web 服务从 Machine.config ⽂件中获得所在。
但是,计划的报告呈现由报表服务器的 Windows 服务。
报表服务器的 Windows 服务获取从 RSReportServer.config ⽂件的所在。
有关所在的详细信息,请参阅"更多信息"⼀节。
⽅法 4
升级到 64 位版本的 Microsoft SQL Server 2005年报告服务。
⽅法 5
重新设计该报表。
若要执⾏此操作,请使⽤下列⽅法之⼀。
⽅法 A
重新设计报表查询。
通过重新设计报表查询,通过以下⽅法,可以减少内存消耗:
1.报告查询中返回更少的数据。
2.在报告查询的 WHERE ⼦句中使⽤的⼀个更好的限制。
3.移动到数据源的复杂的聚合。
⽅法 B
将报表导出为其他格式。
通过使⽤不同的格式来显⽰报表,您可以减少内存占⽤。
下表列出了⼏个按顺序从⼤多数内存消耗到最低的内存消耗的导出格式。
复制代码代码如下:
格式说明
Microsoft Excel 呈现在 Excel 中的报表
(TIFF) 图像将报表呈现为静态图像的⾯向页的格式
PDF 呈现报表采⽤可移植⽂档格式 (PDF)
HTML 呈现到浏览器在 HTML 报表
CSV 呈现报表以逗号分隔的格式;在与 CSV ⽂件格式关联的查看⼯具中打开报表
XML 呈现报表的 XML ;在浏览器中打开报表
注意:如果没有应⽤ XSLT 转换,这种格式将消耗⽐ CSV 格式所消耗的内存更少。
⽅法 C
简化报表设计。
可以通过以下⽅式简化报表设计减少内存消耗:
1.在报告中包含更少的数据区域或控件。
2.钻取报表⽤于显⽰详细信息。
此外,如果报告的⽬的是只是数据的集合,可⽤于其他 Microsoft 产品更好的性能。
例如,您可以使⽤数据转换服务 (DTS) 或Microsoft SQL Server 2005年集成服务。
⽰例
下⾯的⽰例演⽰了如何解决此问题。
请考虑下⾯的⽰例:
1.以 PDF 格式,并以 Excel 格式,⽆法呈现在报表管理器返回 160 页的报告。
当使⽤ 8.5 × 11 英⼨页⾯尺⼨时,报表可能远远超过 250 页。
2.报表的数据源返回报表服务器 500 兆字节 (MB) 的数据。
通常情况下,SQL Server 2000年报表服务要求数据集所使⽤的内存量的两到三倍。
因此,SQL Server 2000年报告服务需要⼏乎 1.5 GB 的内存来呈现该报表。
若要解决此问题,在此⽰例中,重新设计报表,以显⽰该报表仅为有限的⼀组筛选器值的汇总数据。
此外,请确保聚合发⽣在报告数据中提取数据库查询和聚合中的报告本⾝不是。
这些⽅法有助于⼤⼤减少到报表服务器返回的数据量。
因此,成功地并更快地呈现报表。