SQL Server出现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 的内存来呈现该报表。

若要解决此问题,在此示例中,重新设计报表,以显示该报表仅为有限的一组筛选器值的汇总数据。此外,请确保聚合发生在报告数据中提取数据库查询和聚合中的报告本身不是。这些方法有助于大大减少到报表服务器返回的数据量。因此,成功地并更快地呈现报表。



相关阅读:
javascript中slice(),splice(),split(),substring(),substr()使用方法
mysql压力测试脚本实例
javascript内置对象操作详解
记一次Oracle数据恢复过程
win10中安装的软件不兼容该怎么办?
Macbook Pro/Air合上盖子无法正常睡眠/唤醒的解决方法
js实现目录定位正文示例
Javascript中With语句用法实例
快速把Win10任务栏应用图标底色透明的技巧
Win10操作系统分发商 为什么是这四家?
基于mysq字段选择的详解
Ajax 无刷新在注册用户名时判断是否为空是否被使用
jquery获取div距离窗口和父级dv的距离示例
.NET MVC中ViewData,ViewBag和TempData的区别浅析
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 CMS SQL jQuery C# C++ java Android IOS oracle MongoDB PostgreSQL SQLite 交通频道 吉安-济源 宿州-惠安 驻马店-昌都 天津-吉林 固原-阿坝 崇明-漯河 阳泉-石嘴山 塔城-石狮 焦作-抚州 洛阳-海城 恩施-临沧 海盐-常德 绥化-双流 乌海-铜陵 丽水-海西 余姚-肥城 锡林浩特-普洱 安庆-娄底 永康-秦皇岛 铜川-包头 资阳-邢台 大同-茂名 福州-乐清 西安-信阳 沧州-宁海 昭通-朝阳 庆阳-苍南 淮北-忻州 嘉善-定西 荆门-海口 佳木斯-阜新 临安-广州 庄河-泰安 温岭-濮阳 云浮-永康 太原-信阳 无锡-通化 百色-哈尔滨 乐清-荆州 偃师-巩义 海门-攀枝花 许昌-铜陵 兰州-驻马店 溧阳-鄂州 秦皇岛-武威 贵阳-长春 资阳-文山 防城港-温岭 桂林-东营 蓟县-克拉玛依 张家港-德阳 荆州-新余 天水-白山 莱芜-日喀则 塔城-绍兴 临沂-四平 双流-赣州 荆州-乌鲁木齐 天门-营口 惠州-龙海 淮南-六盘水 长兴-遂宁 钦州-苏州 海盐-贵阳 衡水-牡丹江 贺州-聊城 连云港-云浮 东阳-郴州 石河子-威海 抚顺-孝感 阜新-岳阳 商丘-鹤壁 石家庄-神木 恩施-宁德 攀枝花-东台 常州-衢州 梧州-威海 上虞-保山 聊城-荆州 贵阳-南通 蛟河西-齐齐哈尔 深州-绵阳 冠豸山-惠安 义县-通辽 定州-苏州 达日其嘎-嘎拉德斯汰 厦门北-德兴 鹤山-恒地营 进贤-上饶 丰城-建瓯 吴桥-常州 南峪-寿阳 瑞昌-平顶山 厦门-弋阳 绥中-安顺 沙日乃-宇宙地 锦州-烟筒屯 宝鸡-广州 虎林-青岭子 芷江-衢州 玉林-师宗 芜湖-泊头 中和-讷尔克气 廉江-佛山 沟口-石门子 杭州-源潭 保定-涿州 郭家屯-任家店 江宁-恩施 通辽-海宁 林源-怀柔北 太原-重庆北 石家庄-秦皇岛 乌鲁木齐-张家界 资溪-绵阳 玉田县-通辽 郑州-泊头 黄口-蔡家坡 大虎山-松江 洛阳-徽县 呼和浩特-查布嘎 乌鲁木齐-德阳 杭州东-朝阳镇 田东北-弥勒 岳阳-临城 盘关-茅草坪 王杨-白奎堡 五府山-旌德 驻马店西-德安 三关口-石坝 镇江南-永康南 玉林-六枝 缙云-海宁 赣州-淮滨 咸阳-天津 洛门-陇西 南宁-西安 奉化-福安 上板城南-张辛 西乡-汉中 建始-抚州 龙江-开鲁 阜阳-余姚 扶余北-定远 安图-静海 温岭-阳澄湖 大兴-普兰店 绍兴北-荆州 荆州-济南 康城-午汲 天津-巨野 蚌埠-娄底 厦门北-徐州东 合肥-溧阳 湛江-富川 富源北-古田北 明港东-渭南北 深州-向塘 抚顺北-泰山 镇江-丰都

Copyright © 2016 phpStudy |