如果能在实例级别为同一SQL服务器上的不同实例限制其能够使用的最大和最小内存,就能降低这种情况对其他应用系统的影响。具体的 *** 作如下:
(一)实例的最大和最小内存设置
右击数据库,选择属性,如图。
为实例设置合适的最大和最小内存,如图。
(二)为 *** 作系统预留足够的内存
假如一台8GB的服务器,我们可以限制数据库使用的内存上限不超过6GB,剩下的2GB留给 *** 作系统使用。
(三)配置lockpagesinmemory
查看SQL进程的启动账户,如图。
在组策略里设置启动SQL Server的账户拥有锁定内存页的权限。如图。
在下图的添加用户或组界面,添加SQL server的服务启动账户,如图。
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的内存管理机制有了调整
升级硬件驱动程序,或者联系微软技术服务,帮忙检查是不是硬件方面问题引起
配置 SQL Server 实例使用的 SQL Server 进程的内存量(以 MB 为单位)。 有两个服务器内存选项:min server memory 和 max server memory。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)