1、Windows的一些内存术语
Virtual Address Space(虚拟地址空间):应用程序能够申请访问的最大地址空间。对于32位的服务器,地址寻址空间为2的32次方,也就是4GB,但是这4GB并不是都给SQL Server使用的,默认情况下是用户态2GB,核心态2GB,所以说对于32位的系统SQL Server只有2GB的内存可供使用。不过可以通过设置/3GB boot.int参数,来调整系统的配置,使用户态为3GB,核心态为1GB。或者开启AWE(地址空间扩展),将寻址空间扩展为64GB,不过该设置有缺陷,下面会分析。
Physical Memory(物理内存):也就是通常所说的电脑的内存大小。
Reserved Memory(保留地址):应用程序访问内存的方式之一,先保留(Reserve)一块内存地址空间,留着将来使用(SQL Server中的数据页面使用的内存就是通过这个方式申请 的)。被保留的地址空间,不能被其他程序访问,不然会出现访问越界的报错提示。
Committed Memory(提交内存):将保留(Reserve)的内存页面正式提交(Commit)使用。
Shared Memory(共享内存):对一个以上进程可见的内存。
Private Bytes(私有内存):某进程提交的地址空间中,非共享的部分。
Working Set:进程的地址空间中存放在物理内存中的部分。
Page Fault(页面访问错误):访问在虚拟地址空间,但不存在于Working Set中会发生Page Fault。这个又分两种情况,第一种是目标页面在硬盘上,这钟访问会带来硬盘读写,这种称为Hard Fault。另外一种是目标页面在物理内存中,但是不是该进程的Working Set下,Windows只需要重新定向一下,成为Soft Fault。由于Soft Hard不带来硬盘读写,对系统的性能影响很小,因此管理员关心的是Hard Fault。
System Working Set:Windows系统的Working Set。
2、Windows的内存检测
可以通过Windows的性能监视器来检测Windows的内存使用情况,在检测内存上,比较重要的计数器有下面一些:
分析Windows系统的内存总体使用情况的计数器:
Memory:Available MBytes:系统中空闲的物理内存数。
Memory:Pages/Sec:由于Hard Page的发生,每秒钟从硬盘中读取或者写入的页面数。该计数器等于Memory:Pages Input/Sec与Memory:Pages Output/Sec之和。
分析Windows系统自身的内存使用情况的计数器:
Memory:Cache Bytes:系统的Working Set,也就是Windows系统使用的物理内存数。
对于每个进程的内存使用情况的计数器:
Process:Private Bytes:进程提交的地址空间中非共享的部分。
Process:Working Set:进程的地址空间中存放在物理内存中的那部分。
从这些计数器中,我们可以看到系统中是否还有空闲内存,哪个进程使用的内存最多,在发生问题的时候是否有内存使用量突变等情况。这为接下来分析SQL Server的使用提供一个前提条件。