SQL Server使用2G以上内存设置方法
摘要
在32位的Windows 2003
Server中,进程内存被限制为2GB,而目前数据库服务器基本上都配置有4G内存甚至更多,因此如何有效利用多出的内存,是数据库服务器性能优化的重要部分。本文简要介绍了PAE和AWE的原理以及配置方法,使得32位的环境下可以突破2G这一瓶颈,从而提升数据库服务器的效率。
AWE简介
目前随着硬件成本的降低,一般的服务器具有4G以上的内存。可能很多人认为,如果使用Winows 2003
Server系统,最高可以支持4G内存。其实这么说并不准确,应该说32位机支持 2^32=4G
的寻址空间,但实际上默认应用程序只能占用其中的2G内存,这一限制是32位操作系统架构引起的。传统意义上的32bit操作系统使用32bit的内存地址,这样寻址范围就已经被限制为4GB——4G也就是2的32次方,然而通常操作系统的设计上为了安全性的考虑,应用程序和内核所处的内存地址空间是互相独立的,也就是说,应用程序和内核各自能访问2GB的内存空间。虽然不同的操作系统实现具有不同的值,不过多数现在的操作系统在这一点上都很一致。
为了让程序突破2GB寻址的限制,近代Windows
NT核心提供了一个变通的方案:4GB内存调整优化技术,通过这个技术,可以将用户模式的寻址空间扩大至3GB,这样核心寻址空间便被限制为1GB了,需要超大内存容量的应用程序可以从这个特性中获得性能改善,如SQL
Server数据库这种类型。要使用这个4GB内存优化技术,用户需要在Windows
Server操作系统的启动参数中加入/3GB开关。
然而让用户模式程序能多寻址1GB毕竟还算是治标不治本,于是Microsoft还在自己的操作系统中通过PAE 提高 IA32
处理器处理大于 4 GB 的物理内存的能力。下列操作系统可以通过 PAE 来利用大于 4 GB 的物理内存:
Microsoft Windows 2000 Advanced
Server
Microsoft Windows 2000 Datacenter
Server
Microsoft Windows Server 2003 Enterprise
Edition
Microsoft Windows Server 2003 Datacenter
Edition
PAE,即物理地址扩展(Physical Address Extension),可使得 x86 的计算机能够支持 4 GB
以上物理内存。物理地址扩展 (PAE) 允许将最多 64 GB 的物理内存用作常规的 4 KB
页面,并扩展内核能使用的位数以将物理内存地址从 32 扩展到
36。它允许将4G以上更多的物理内存映射为应用程序的虚拟地址空间,这样就可以实际访问到 4G 的内存空间了。
应用程序可以通过AWE实现对超出4GB的内存访问,AWE,即地址窗口扩展(Address Windowing
Extension),是内存管理器功能的一套应用程序编程接口 (API),它使程序能够寻址更多内存 — 超过标准 32 位寻址的 4
GB 内存空间。AWE
使程序能够将物理内存保留为非分页内存,然后将非分页内存部分动态映射到程序的内存工作集。此过程使内存密集型程序(如大型数据库系统)能够为数据保留大量的物理内存,而不必交换分页文件以供使用。相反,数据在工作集中进行交换,并且保留的内存超过
4 GB 范围。此外,超出 4 GB 的内存范围对内存管理器是公开的,并且 AWE 通过 PAE 发挥作用。没有 PAE,AWE
就无法保留超出 4 GB 的内存。
AWE
API集的原理其实是基于这样的一个事实:所有的支持PAE的操作系统都有能让IA32处理器直接寻址64GB物理地址的API,回想前面的内容,物理地址是CPU处理的地址,而每个程序私有的2GB内存地址被称为虚地址范围。每个支持PAE的操作系统都具有这种API,差别只是在于这些API能否提供如内存共享、进程间通讯、分页等等这些功能,微软在Windows上提供了一个简单明了的API组——也就是AWE地址窗口扩展API组,它仅仅由5个API调用组成,包括了核心级和用户级调用,使用AWE分配得到的内存是非分页、锁定的,其他程序无法访问,也无法交换到页面文件(虚拟内存)上去,对性能具有很大的提升。
通过使用AWE API,核心模式/用户模式可以轻易地突破2GB容量的限制,最高可以达到64GB,如SQL
Server就使用了这个AWE API(可设定),从而提高对大容量内存的能力,大大提升了应用软件/系统的性能。
2. AWE的配置方法
2.1.打开操作系统启动时PAE 配置项;
步骤:找到系统安装的引导位置的目录下找到boot.ini文件,默认是隐藏只读的,找到 Windows2003 启动配置,在后面加上空格 /PAE ,保存;重启
示例:
multi(0)disk(0)rdisk(0)partition(2)%systemroot%=
"Windows Server 2003 Datacenter Edition
" /PAE
2.2.修改组策略
首先应用程序要满足第一条要求,它必须能具备内存锁定页面功能,这需要在组策略中进行设置,如图所示打开组策略,添加数据库运行所依赖的帐号有权进行锁定内存;大部分情况下,数据库运行的帐号都是系统级的帐号,如administrator
或者是 administrators组的帐号,当然也有处于安全考虑的给了一个运行权限很小的帐号,只能运行数据库;所以必须授权该帐号具有锁定内存的权限;
步骤:开始->运行->gpedit.msc->组策略->计算机设置->windows配置->安全设置->本地策略->用户权限分配->内存中锁定页面->本地安全策略设置->添加->选择运行的帐号或者组;
2.3.重启服务器,
远程维护的要查看boot.ini是否正确,切记!否则后果可想而知;
2.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
SQL2000必须通过以上控制台命令进行,而对于SQL2005,可以在图形界面下设置。进入SQL2005的管理界面,将AWE选项打开。设置完毕需要重新启动SQL服务。
2.5.重启数据库
当配置项手工配置好后,需要重启数据库,这时你就发现SQLSERVER2005数据库占用多大的内存了,再看看数据库的属性也改变了,AWE上打了勾,最大内存改为3G了
3. 注意点:
当操作系统PAE未打开时,配置数据库是没有用的,数据库会提示出错,告诉你内存锁定系统当前不支持;
Boot.ini
文件是隐藏的,只读的,先修改属性后再操作;
数据库重启前最好先备份,防患于未然;
数据库的内存设置有一个合理限度,根据服务器业务多少确定,但不能超过物理内存,另外如果系统中还有其他的服务在使用也要考虑进去,否则系统内存不足,引起磁盘页面交换频繁,反而使性能有所下降。
4. 性能测试及建议
我们在被测服务器上安装了Microsoft SQL
2005,按照测试要求建立了数据库。BF在测试之前会在数据库中生成9个表,其中包括4个500万行的表格,每行包括100字节的数据,因此每个表格容量大约是476MB,整个数据库容量为1.86GB。我们用60个客户端模拟了总共1600个用户,在这个数据库中进行查询、添加、删除、修改等操作。在测试期间,数据的吞吐量很小,因此网络吞吐量不会成为瓶颈。
这里可以看出,我们的配置使用了AWE功能之后,数据库在中等用户数量下的性能得到了较大的提升,幅度可以达到25%左右,而在大量用户数量下,使用AWE功能会导致性能下降10~20%左右。
测试结果看上去有些奇怪,不过分析之下应该可以理解。我们的测试机器只具有4GB内存(和2~4GB虚拟内存),在中等用户数量条件下,AWE功能让数据库突破了2GB的限制,从而可以达到3GB左右,因此吞吐量得到了提升。而在重负荷的情况下,系统内存已经耗尽(操作系统、文件系统缓存本身也要占用一定的内存),因此AWE锁定内存页面反而降低了可以用于分页的内存,因此性能会有降低。从这点来看,3GB~4GB的重负荷数据库服务器使用AWE的必要性不是很大。
然而再往上就不同了,AWE可以让系统内存得到充分的利用,而现下内存价格已经不是特别贵了,大内存的服务器也变得较为常见,因此我们建议使用SQL数据库的时候尽量开启AWE功能。
参考文档: