以下均是针对Window 32位系统环境下,64位的不在下面描述情况下。
用户模式和内核模式(user mode& kernel mode)
为了防止用户程序访问并篡改操作系统的关键部分,Windows使用了2种处理器存取模式:用户模式和内核模式。顾名思义,内核模式是给操作系统核心代码和基本驱动用的,用户模式给用户应用程序。在内核模式下程序可以访问所有的内存和硬件,并使用所有的处理器指令。操作系统程序比用户程序有更高的权限,使得系统设计者可以确保用户程序不会意外的破坏系统的稳定性。
物理内存(Physical Memory)
即实际购买的内存的大小,内存条上的容量。CPU的地址线可以直接进行寻址的内存空间大小,在32位操作系统平台上,CPU的最大寻址空间为4GB,也即可以支持最大4G的物理内存空间。在32位操作系统上即便你购买的是64G内存,也只能说拥有4GB的物理内存空间
虚拟内存(Virtual Memory)
如果计算机缺少运行程序或操作所需的随机存储内存,则Windows使用虚拟内存进行补偿。虚拟内存将计算机的RAM和硬盘上的临时空间组合在一起,当RAM不足时,虚拟内存将数据从RAM移动到称为“分页文件”的空间中,将数据移入与移出分页文件可以释放RAM,以便完成工作。
虚拟地址空间(Virtual Address Space,简称VAS)
在Windows系统中,任何一个进程都被赋予了其自己的虚拟地址空间,该虚拟地址空间覆盖了一个相当大的范围,对于32位系统的虚拟地址空间范围从0x00000000~0xffffffff(4GB)。Windows采用分页机制,将4G的地址空间分成固定大小的页,并且将虚拟地址中的每一页映射到物理内存中。
在缺省的情况下虚拟地址空间中的低2G,即0x0000000~0x7FFFFFFFF是用户地址空间,而4G虚拟地址空间中的高2G即0x8000000~0xFFFFFFFF是分配给内核模式。实际上用户进程拥有的虚拟地址空间只有2GB。
虚拟内存管理器(Virtual Memory Manager)
虚拟内存管理器负责虚拟地址空间和物理内存的地址映射,如果缺乏足够内存,则需要使用到page file文件来保持临时数据也即虚拟内存,同时使用page table entry(PTE)来跟踪每一个地址映射关系。
到这里为止,64G的内存有60G都无法访问,岂不是浪费了,那怎么办?
/3GB和increaseUserVA
通过/3GB的方式,可以减少内核模式占用地址空间,从而增加SQL Server进程的地址空间。默认情况下,用户模式和内核模式各自占用2G寻址空间,3G选项可以使得SQL Server获得多1G的虚拟地址空间。
/3GB开关用法:
在Boot.ini文件中修改其中的段落即可:
或者使用bootcfg命令
在Windows Server 2008中可以运行BCDEdit命令,加以调整。
物理地址扩展PAE(Physical Address Extension)
物理地址扩展(PAE)是32位Intel CPU的一种扩展,这样可以在32位系统上支持最大64G的物理内存,即4GB以上物理内存允许将更多物理内存映射为应用程序的虚拟地址空间。
使用方式,在Boot.ini文件中修改其中的段落即可:
在Windows Server 2008操作系统下也可以通过以下命令执行
/PAE和/3GB
两者的目标是不同的,又可以在同样的地方进行配置,所以难免产生疑惑,简单的来说就是如果计算机可用物理内存超过16GB,就需要确保boot.ini文件中没有/3gb参数即可。
地址窗口化扩展插件AWE(Address Windowing Extensions)
AWE是Windows的内存管理功能的一组扩展,它能够使应用程序使用的内存量超过通过标准32位寻址可使用的2~3G内存。AWE允许应用程序获取物理内存,然后将非分页内存的视图映射到32位地址空间。虽然32位地址空间限制为4GB,但是非分页内存却可以远远大于4GB。
在SQL Server 2008下,可以登录SQL Server Management Studio,找到相应的数据库实例,点击右键选择属性,然后在“选择页”中点击内存,在服务器内存选项中,复选使用AWE分配内存即可。