我有一台数据库服务器,32位,操作系统是Windows2003企业版,4G内存,320G存储空间,使用SQLSERVER2005 数据库管理系统,里边有若干个数据库,平时主要处理大量的业务外,还设置了一些同步,由于及时优化,CPU 一直保持在5%以下,各项主要指标观察下来一直正常,如数据库的缓冲命中率保持在95%以上等,所以平时就以默认安装的模式运行着,本以为SQLSERVER2005能合理的分配内存,至少比SQLSERVER2000有了很大的改进,且操作系统也由Windows 2000Server更新为Windows 2003,内存不足时无论是系统还是数据库本身都会自动调整内存(Sqlserver2000需要手工调整,可Google一下),最近观察不管是什么时候内存使用都不超过2G,且SQLSERVER2005占用1.7G的现象,开始以为是数据数内存足够了,也没有在意,后来越想越觉得有问题,当操作大表时,数据库占用的内存都有任何改变,于是Google一下才发现也需要手工调整,当然是原因一大堆,想想解释得也合理。于是也及时进行了调整,效果还不错。
这里把调整的步骤讲给大家,希望有同样问题的朋友参考参考:
1.打开操作系统启动时PAE 配置项;
步骤:找到系统安装的引导位置的目录下找到boot.
ini文件,默认是隐藏只读的,找到 Windows2003 启动配置,在后面加上空格 /PAE ,保存;重启
示例所示:
multi(0)disk(0)rdisk(0)partition(2)\%systemroot%= "Windows Server 2003 Datacenter Edition " /PAE
2.打开组策略,添加数据库运行所依赖的帐号有权进行锁定内存;大部分情况下,数据库运行的帐号都是系统级的帐号,如administrator 或者是 administrators组的帐号,当然也有处于安全考虑的给了一个运行权限很小的帐号,只能运行数据库;所以必须授权该帐号具有锁定内存的权限;
步骤:开始->运行->gpedit.msc->组策略->计算机设置->windows配置->安全设置->本地策略->用户权限分配->锁定内存页->本地安全策略设置->添加->选择运行的帐号或者组;
3.重启服务器,远程维护的要查看boot.ini是否正确,切起切起,否则后果可想而知;
4.配置数据库,重启后操作系统已支持大内存了,但数据库还是需要配置的;默认都未配置;执行以下命令即可
步骤:打开查询分析器,进行以下操作,这里以3G内存给数据库使用为例进行操作,这几条命令分别含义是:打开高级选项,打开锁定内存,设置最大内存,最好是一起完成;
sp_configure 'show advanced options', 1
RECONFIGURE
GO
sp_configure 'awe enabled', 1
RECONFIGURE
GO
sp_configure 'max server memory', 3072
RECONFIGURE
GO
5.重启数据库,当配置项手工配置好后,需要重启数据库,这时你就发现SQLSERVER2005数据库占用多大的内存了,再看看数据库的属性也改变了,AWE上打了勾,最大内存改为3G了,以前是很大的,忽悠我^-^
注意点:
1.当操作系统PAE未打开时,配置数据库是没有用的,数据库会提示出错,告诉你内存锁定系统当前不支持;
2.Boot.ini 文件是隐藏的,只读的,先修改属性后再操作;
3.数据库重启前最好先备份,防患于未然;
4.不知是操作系统问题,还是盗版的问题,我的SQLSERVER2005在进程任务管理器只有180M,经过和朋友确认,才知是显示错误,其实也不知是错误还是就是这样的,我想有一种可能,那就是系统把3G划给数据库使用后,自己只有1G,他只知道自己分配的那一块给数据库系统180M吧;
5.数据库的内存设置有一个合理限度,根据服务器业务多少确定,但不能超过物理内存,我觉得至少得留500M给系统吧,另外如果系统中还有其他的服务在使用也要考虑进去,否则系统内存不足,引起磁盘页面交换频繁,反而使性能有所下降。