对SQL Server虚拟内存不足的解决

本文介绍了SQLServer在不同版本和数据库数量下的虚拟内存管理策略。详细解释了如何通过-g参数预留额外内存来避免虚拟内存不足的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引自:http://www.54master.com/html/yingjianshebei/shujuku/2010/0706/3622.html

 

你是否会经常碰到SQL Server虚拟内存不足这一难题,以下的文章主要介绍的如何正确应对这一故障的解决,我们大家都知道在具有2GB 或是更多RAM的计算机上,除了256 MB (SQL Server 7.0) 或 384 MB (SQL Server 2000) 虚拟地址空间之外,SQL Server在启动过程中保留剩下的所有虚拟地址空间以供缓冲池使用。

  另外,为了存储数据和过程缓存,SQL Server使用缓冲池内存为来自 SQL Server 进程的大多数小于8 KB的其他内存请求提供服务。剩下的未保留内存准备用于不能从缓冲池得到服务的其他分配。这些分配包括、但不限于以下各项:SQL Server创建的所有线程的堆栈和关联的线程环境块。在SQL Server创建了所有 255 个工作线程之后,这大约为140MB。

  由在 SQL Server地址空间(根据具体系统而有所不同)中运行的其他DLL或进程进行的分配,如: 任何链接的服务器中的 OLE DB 提供程序。

  通过使用 sp_OA 系统存储过程或扩展存储过程加载的COM对象。

  加载到地址空间中的任何映像(.exe 或 .dll),这些映像通常使用 20 到 25 MB,但是如果您使用链接的服务器、sp_OA 或扩展存储过程,则这些映像可能使用更多的空间。

  进程堆和 SQL Server 可能创建的任何其他堆。在启动过程中,此空间通常为10 MB,但是如果您使用链接的服务器、sp_OA 或扩展存储过程,则此空间可能更多。

  来自SQL Server进程的大于8 KB的分配,例如较大查询计划、网络数据包大小配置选项接近于 8 KB 时发送和接收缓冲区等情况所需要的分配。要查看此数字,请查找在 DBCC MEMORYSTATUS 中报告的 OS Reserved 值,该值是作为 8 KB 页的数目报告的。通常,该值为 5 MB。

  跟踪缓冲池中每个缓冲区状态信息的数组。该值通常约为20 MB,除非SQL Server 运行时启用了地址窗口化扩展插件(AWE),在这种情况下,该值将会显著提高。

  在拥有大量数据库的系统上,日志格式化所需的 64 KB 分配可能会占用所有剩余的SQL Server虚拟内存。这之后的分配将失败,导致本文的“症状”一节中列出的一个或多个错误。

  通过使用 -g 启动参数,您可以指示 SQL Server 保留附加的SQL Server虚拟内存可用,以便这些与日志相关的分配和其他正常分配加在一起也不会用完虚拟地址空间。

  下表根据数据库的数目和服务器版本列出-g值的一些建议初始值: DatabasesSQL Server 7.0 SQL Server 2000:

  250-g134N/A 500-g185N/A 750-g237N/A 1000-g288-g288 1250-g340-g340 1500-g392-g392

  此表是使用列出的典型值进行计算的,并且此计算是基于没有使用链接的服务器活动、sp_OA 或扩展存储过程这一假设的。它还假设您没有使用 AWE 和 SQL 事件探查器。出现以上任意一种情况都需要您增加 -g 的值。

  如果服务器上数据库的数目超过此数目,Microsoft 建议您在运行该服务器之前进行慎重的考虑,因为系统上具有如此数目的数据库所需的系统开销将占用缓冲池中的大量SQL Server虚拟内存,从而可能导致系统整体性能下降。

    以上的相关内容就是对解决SQL Server虚拟内存不足情况的介绍,望你能有所收获。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值