在SQLServersystem.outofmemoryexception异常的方法

今天,当使用SQL Server 2008来执行一个SQL脚本文件,总会有错误,原因system.outofmemoryexception是类型。脚本是从SQL Server 2008导出的。这不应该是错的。经过很长一段时间,这个问题是可以解决的。

造成这种错误的主要原因是SQL脚本文件太大,估计值超过100米,解决方案是将脚本文件分成几个脚本文件并单独执行。



从微软官方解决方案:

原因uff1a

这个问题发生是因为计算机没有足够的内存来完成请求操作。

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

计算机没有足够的内存来完成以下操作中的一个或多个请求操作:

1。报告太大或太复杂。

2。其他运行过程的成本非常高。

3的物理记忆。电脑太小。

对报告的处理分为两个阶段,两个阶段是执行阶段和陈述阶段,这个问题发生在执行阶段,或者出现在陈述阶段。

如果这个问题在执行阶段发生,这个问题很可能是由于查询结果中返回的数据占用的内存太多:

1。分组

2。筛选

三.聚合

4。分类

5。自定义代码

如果这个问题出现在演示阶段,原因是显示报告中显示的信息以及报告是如何显示信息的。

1。控件的数量和类型

2。这些控件之间的关系

三.格式设置

4显示的数据量。

解uff1a

如果您想解决这个问题,请使用以下方法之一。

方法1

向计算机添加足够的物理内存。

注意,如果你有超过2000兆个字节(GB)的内存, / 3GB开关可以在Boot.ini文件性能更好的启用。详细信息如何使用SQL Server中的 / 3GB开关,点击下面的条数,微软知识库中看到相应的文章:

274750如何配置SQL Server使用超过2 GB的物理内存

方法2

报告计划计划在内存限制受限的低峰值时间段运行。

方法3

调整是相应设置的。

注:报表服务Web服务报告时,表示服务的Web服务位于machine.config文件。然而,计划报告是由报表服务器Windows服务,报表服务器Windows服务获取的rsreportserver.config文件的位置。

有关更多详细信息,请参见更多信息部分。

方法4

升级为2005的微软SQL Server报表服务的64位版本。

方法5

重新设计报告。要执行此操作,请使用以下方法之一。

方法一

重新设计报表查询,通过重新设计报表查询,可以通过以下方法减少内存消耗:

1。报表查询返回更少的数据。

2。在报告查询的WHERE子句中使用了更好的限制。

三.移动到数据源的复杂聚合。

方法B

将报表导出到其他格式。通过使用不同格式显示报表,可以减少内存占用。下表列出了从大多数内存消耗到最低内存消耗顺序的几种导出格式。

复制代码代码如下:格式化

微软Excel在Excel中提交报告

(TIFF)一种面向页面的报表格式,它将报表呈现为静态图像。

PDF演示报告使用了一种可移植文档格式(PDF)。

HTML在HTML报告中显示给浏览器。

CSV以逗号分隔的格式呈现报告;在与CSV文件格式相关联的视图工具中打开报告

XML显示报表的XML;在浏览器中打开报表

注意:如果不应用XSLT转换,这种格式将比CSV格式消耗更少的内存。

方法C

简化报表的设计。通过简化报表的设计,可以减少内存消耗,如下所示:

1。报告中的数据区域或控件较少。

2。钻孔报告用于显示详细信息。

此外,如果报告的目的仅仅是数据的集合,则可以用于更好地实现其他微软产品的性能。例如,您可以使用数据转换服务(DTS)或微软SQL Server将服务集成到2005中。

样品

下面的示例演示如何解决这个问题:

1。在PDF格式和Excel格式中,报表不能显示在报表管理器上返回160页。当使用8.5×11英寸页面大小时,报告可能超过250页。

2的数据源。报表返回报表服务器500兆字节(MB)的数据。一般来说,SQL Server报表服务需要数据集所使用的内存量的2到三倍。因此,2000中的SQL Server报告服务需要将近1.5 GB的内存来提交报告。

为了解决这个问题,在这个例子中,重新设计的报告表明,报告仅仅是一个概括的一组有限的滤波值。此外,确保发生聚集在报告中提取数据的数据库查询和报告在聚集本身不是。这些方法有助于大大减少通过报表服务器返回的数据量。因此,报告成功更快。