您现在的位置: Gufang > 博客 > 学无止境 > 正文
SQL Server使用2G以上内存设置方法

摘要

在32位的Windows 2003 Server中,进程内存被限制为2GB,而目前数据库服务器基本上都配置有4G内存甚至更多,因此如何有效利用多出的内存,是数据库服务器性能优化的重要部分。本文简要介绍了PAE和AWE的原理以及配置方法,使得32位的环境下可以突破2G这一瓶颈,从而提升数据库服务器的效率。

 

  1. 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',                -- 打开高级选项

RECONFIGURE

GO

sp_configure 'awe enabled',                                  -- 打开锁定内存

RECONFIGURE

GO

sp_configure 'max server memory', 3072               -- 设置最大内存

RECONFIGURE

GO

 

 

2.5.重启数据库

当配置项手工配置好后,需要重启数据库,这时你就发现SQLSERVER2005数据库占用多大的内存了,再看看数据库的属性也改变了,AWE上打了勾,最大内存改为3G

   

 

3. 注意点:

  1. 当操作系统PAE未打开时,配置数据库是没有用的,数据库会提示出错,告诉你内存锁定系统当前不支持;
  2. Boot.ini 文件是隐藏的,只读的,先修改属性后再操作;
  3. 数据库重启前最好先备份,防患于未然;
  4. 数据库的内存设置有一个合理限度,根据服务器业务多少确定,但不能超过物理内存,另外如果系统中还有其他的服务在使用也要考虑进去,否则系统内存不足,引起磁盘页面交换频繁,反而使性能有所下降。

 

 

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功能。

发表评论(0)
姓名 *
电子邮件
QQ
评论内容 *
验证问题 * 江苏省的省会是哪个城市?请填写正确答案
验证码 * 图片看不清?点击重新得到验证码