2.2 规划内存子系统
2.2.1 内存寻址空间
X86 架构的处理器使用32位地址总线,内存寻址空间达到4GB(即2的32次方)。在32位操作系统中,2GB的内存保留给操作系统使用;另外2GB的内存被专用于进程,由应用程序使用。
Windows Server 2003 可以在 Boot.ini 文件中使用“/3GB”选项,使保留给操作系统的内存缩减到1GB,从而将接近3GB的内存用于应用程序的进程。
X64 处理器理论上可以使用64位地址总线,从而使理论上的内存寻址空间达到16EB(即2的64次方)。目前的硬件支持44位寻址(即16TB),但 Windows Server 2008 仅支持 64GB 内存,Windows Server 2012最大支持 4TB 内存。
提示:
字节的计量单位是2的次方,而不是10的整数倍数。
1 EB = 1024 PB (2的60次方) 1GB = 1024 MB (2的30次方)
1 PB = 1024 TB (2的50次方) 1MB = 1024 KB (2的20次方)
1 TB =1024 GB (2的40次方) 1KB = 1024 字节 (2的10次方)
2.2.2 虚拟内存
虚拟内存实际上是使用一部分磁盘空间来充当内存使用。当物理内存耗尽时,Windows 就会自动调用虚拟内存,以缓解内存紧张。位于磁盘上的虚拟内存文件被称为“分页文件”,将物理内存中的数据页移入分页文件可释放物理内存空间。一般而言,若物理内存匮乏,则可尝试通过增加虚拟内存进行补偿。但是,物理内存的存取速度远远超过磁盘存取速度,因而增加物理内存是最佳选择。
虚拟内存在硬盘上其实就是一个硕大无比的文件,文件名是PageFile.sys,通常状态下是隐藏的。
2.2.3 PAE
X86 架构的处理器为了能够使用4GB以上内存,在32位的处理器上增加了4根额外的地址线,从而使内存寻址空间达到64GB(即2的36次方)。一般的应用软件可以继续使用地址为32位的指令,通过地址空间映射从而访问到64GB的物理内存。
32位的 Windows 需要在启动选项中启用 PAE(Physical Address Extension,物理地址扩展),才可以使用4GB以上内存。
对于32位的 Windows Server 2003,在 Boot.ini 文件中添加“/PAE”选项,重启生效后即可访问高达64GB的物理内存。
对于32位的 Windows Server 2008,由于 boot.ini 文件已经被 BCD(Boot Configuration Data,启动配置数据)文件所代替,可以使用命令行工具 bcdedit.exe 来编辑 BCD 文件。运行此命令需要本机管理员的权限。
bcdedit /set pae forceenable |
提示:
“/3GB”参数必须放在“/PAE”之后。
通过“/3GB”参数压缩了核心内存的空间,同进也压缩了其中 Windows 用于管理物理内存的表,因此,“/3GB”方式下最大只能管理16GB的物理内存。如果可用的物理内存超过16GB,要确保 boot.ini 文件中没有“/3GB”参数。
2.2.4 AWE
操作系统启用了 PAE,实现了最多64GB内存空间。为了使32位操作系统上的应用程序访问 4GB 以上的物理内存,还需要为这些应用程序启用 AWE(Address Windowing Extensions,地址窗口化扩展)插件。
在32位操作系统中,由于应用程序的可用内存太少,Windows 策略“锁定内存页”选项默认关闭。此策略将确定哪些帐户可以使用进程将数据保留在物理内存中,从而阻止系统将数据分页到磁盘的虚拟内存中。
如果 SQL Server 已经启用了 AWE,为了提升 SQL Server 的性能,需要阻止进程将数据分页转存到磁盘的虚拟内存中。
为了启用“锁定内存页”选项,需要使用 Windows 组策略编辑工具,为 SQL Server 使用的启动帐户启用此策略。必须是系统管理员才能编辑此策略。
◆在组策略编辑工具中,依次展开“计算机配置”、“Windows 设置”、“安全设置”、“本地策略”、“用户权限分配”节点。在右侧的细节窗格中找到“将页锁定在内存”。这个策略的名称在不同版本的 Windows 中可能略有差异。
◆为此策略添加有权运行 sqlservr.exe 的帐户。
2.2.5 规划可用的内存
在 X86 平台中,4GB 以上的内存空间并不是直接寻址,因此使用这部分内存会受到一些限制,性能也会比 X64 架构有较大的差距。如果生产环境的 SQL Server 对内存需求很大,应当尽量在64位的Windows 操作系统上安装64位的 SQL Server。
SQL Server 2012 及后续版本使用了新的内存管理机制,所以不支持 AWE。
当一台计算机上安装了多个 SQL Server 实例时,建议为每个实例设置最大内存和最小内存选项。
在安装 SQL Server 时,安装程序会检查当前的内存配置是否满足最低的要求。如果不满足最低要求,安装程序将向用户发出警告但不会阻止安装程序运行。下表列出了 X86 和 X64 平台上 SQL Server 的最低内存要求。
产品 | Express 版本 | Express with Advanced Services | 所有其他版本 |
SQL Server 2005 | 192 MB | 512 MB | 512 MB |
SQL Server 2008 | 256 MB | 512 MB | 512 MB |
SQL Server 2008 R2 | 256 MB | 512 MB | 1 GB |
SQL Server 2012 | 512 MB | 512 MB | 1 GB |
SQL Server 2014 | 512 MB | 512 MB | 1 GB |