SQLSERVER是个很喜欢内存资源的程序,他的理想状态就是把所有可能会用到的数据和结构都缓存在物理内存里,以达到最优的性能。
虽然这样,但是SQLSERVER会约束自己的内存使用量,不过亲们最好对SQLSERVER的内存使用作出合理的分配
SQLSERVER的内存用在哪里?
SQL会缓存大量的数据页面,他还会缓存很多其他信息,包括存储过程的执行计划 ,特定用户的安全上下文等
如果这些信息没有在数据库中缓存,SQL都要重新计算一遍,花额外的时间,所以SQLSERVER对内存的需求是十分强烈的。
配置:
(1)如果服务器支持64位操作系统,没有特殊理由的话,请安装64位系统。这样SQL能够有效地使用 大于2GB的内存。如果一定要用32位系统,务必将SQLSERVER服务器属性里面的“使用AWE分配内存”打开。但是不要用boot.ini文件里的/3GB这个开关,即不要在boot.ini文件里加上/3GB这个参数。
(2)尽量使服务器专门供数据库使用,不要将其他服务(例如IIS,中间层应用服务等)安装在同一台机器上。多个生产应用服务在同一台机器上运行,会大大增加维护成本
(3)建议设置SQLSERVER max server memory(最大服务器内存),以确保Windows有足够的内存供系统本身使用。
情况归纳如下:
一台4GB机器,建议预留1GB,设置SQLSERVER max server memory为2.8GB
一台8GB机器,建议预留2GB,设置SQLSERVER max server memory为6GB
一台大于8GB的64位机器,建议预留3GB~4GB
如果一台服务器上还有其他应用使用内存,也要扣除他们的内存使用数
一般设置SQLSERVER min server memory(最小服务器内存)意义不大
(4)如果是企业版SQLSERVER,建议赋给SQLSERVER启动帐号lock page in memory的权限
设置方法如下:
打开组策略(运行 ,输入gpedit.msc)-》找到计算机配置-》Windows设置-》安全设置-》本地策略-》用户权限分配-》锁定内存页
在锁定内存页上右键,打开锁定内存页属性,添加SQLSERVER启动帐号进去
(5)“set working set size” 这个SQLSERVER参数在现在的Windows上不能起到固定SQL物理内存的作用,所以请永远不要使用
修改完配置之后需要重启SQLSERVER服务才能生效!!!!!
除了配置之外还有一些应对内存错误的其他一些建议:
升级Windows2003到SP2,或者使用Windows2008 ,这些版本的Windows的内存管理机制有了调整
升级硬件驱动程序,或者联系微软技术服务,帮忙检查是不是硬件方面问题引起
原文:https://www.cnblogs.com/lyhabc/archive/2012/09/28/2707857.html