解决SQL Server中虚拟
内存不足的问题
症状
在一台2 GB或更多的内存,除了256 MB(SQL Server 7)或384 MB(SQL Server 2000)的虚拟
地址空间,SQL Server将所有剩余的虚拟地址空间缓冲池使用的
启动过程。此外,为了存储数据和
程序的缓存,SQL Server使用缓冲池的内存对于大多数其他SQL内存要求小于8 KB的SQL
服务器
进程提供服务。剩下的毫无保留的记忆是准备服务,不能从缓冲池获得其他
配置。配置包括,但不限于,由SQL Server和
关联的
线程环境块
创建的所有线程的堆栈。SQL Server中的所有255个
工作线程创建后,这是AB输出140兆字节。
在SQLServer地址空间中
运行的其他DLL或进程的分布(取决于特定的
系统),如任何链接服务器中的任何OLE DB提供程序。
COM对象使用sp_oa系统存储过程或
扩展存储过程加载。
任何图像加载到地址空间(.exe或.dll),这些图像通常使用20到25 MB,但是如果您使用链接服务器,sp_oa或扩展存储过程,这些图像可以使用更多的空间。
这可以由进程堆和SQL Server创建的任何其他堆。在启动过程中,这个空间通常为10 MB,但是如果您使用链接服务器,sp_oa,或扩展存储过程,这个空间可能更。
配置大于8 KB从SQL Server的过程中,如较大的
查询计划、
网络数据包大小的配置
选项,接近时需要发送和接收缓冲区的分配8 KB。看看这号码,查找
操作系统保留值在DBCC memorystatus报道,这是
报告的8 KB页数。通常,该值是5 MB。
跟踪缓冲池中的每个缓冲区状态信息的数组。该值通常约为20 MB,除非在SQLServer运行时
启用地址窗口扩展
插件(敬畏),在这种
情况下,该值将显著改善。
在拥有大量数据库的系统中,日志
格式化所需的64 KB分配可能占用所有剩余的虚拟内存。在此之后的分配将失败,导致本文的症状部分中列出的一个或多个
错误。
通过使用g启动
参数,可以指示SQL Server保留额外的虚拟内存,以便这些与日志相关的赋值和其他正常赋值不会耗尽虚拟地址空间。
下表的初始值是根据数据库和服务器版本的G值上市的数量:databasessql 7.0sql Server 2000服务器
250-g134n /
500-g185n /
750-g237n /
1000-g288-g288
1250-g340-g340
1500-g392-g392
这张桌子是用典型值列计算,这个计算是基于假设服务器的活动,sp_oa或扩展存储过程没有关联。假定你没有用敬畏和SQL事件
管理器。任何情况下出现以上要求你增加价值的G.
如果服务器数据库的数量超过这个数字,微软建议在运行服务器之前仔细考虑,系统的开销是因为这个数字是在系统数据库中需要的,在缓冲池中会占用大量的虚拟内存,这可能会导致系统整体
性能的下降。
:建立SQL Server2000数据库
安全策略