内存相关概念
以下均是针对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文件中修改其中的段落即可: