SQL2005存储引擎本身是一个Windows下的进程,所以SQL2005使用内存和其它Windows进程一样,都需要向Windows申请内存。从Windows申请到内存之后,SQL2005使用内存粗略可以分为两部分:缓冲池内存(数据页和空闲页),非缓冲内存(线程,DLL,链接服务器等)。而缓冲池内存占据了SQL2005的大部分内存使用。缓冲池所占内存也就是图2最大最小内存所设置的,因此sqlservr.exe所占的内存有可能会大于图2中所设置的最大 内存。
还有一点是,SQL2005使用内存的特点是:有多少用多少,并且用了以后不释放(除非收到Windows内存压力的通知)。比如我所在公司的开发服务器,在几乎没有负载的时候来看内存使用。
可以看到CPU在0负载的时候,内存却占据了13个G。这其实是在之前的使用SQL2005向Windows申请的内存一直没有释放所致。
具体SQL2005能够使用多少内存是由以下几个因素决定的:
1.物理内存的大小
2.所安装Windows版本对于内存的限制(比如windows server 2008标准版限制最大内存只能使用32GB)
3.SQL2005是32位或64位
4.如图2所示配置SQL2005对于内存的使用量
5.SQL2005的版本(比如express版只能用1G内存)