内存管理 – SQL Server 2005/2008/2008r2

SQL Server 2012以前的版本(SQL 2005/2008/2008R2),有single page allocator 和multi page allocator。也就是说,如果申请的内存是8k以内的,就会有单页分配器分配,而大于8kb的内存请求,使用multi page 分配器来管理。如图所示。

使用select * from sys.dm_os_memory_clerks查询memory clerk,会发现single pages 和multi pages 两列。


内存管理 – SQL Server 2012

SQL Server 2012里面不再有single page allocator 和multi page allocator,而是把它们统一起来了,叫做 any size page allocator。如图所示。

使用select * from sys.dm_os_memory_clerks查询memory clerk,会发现single page 和multi page字样消失了,只剩下pages 字样。


从上面的图可以看出,SQL Server 2012 使用memory Manager来统一响应SQL Server 内部各种组件内存申请的请求。在SQL Server 2012里面,max server memory 不再像以前的版本那样,只控制buffer pool的大小,也包括那些大于8kb 的内存请求。max server memory 能够更准确地控制SQL Server 的内存使用了。

参考文档:

Memory Manager Configuration changes in SQL Server 2012

http://sqlblog.com/blogs/sqlos_team/archive/2012/07/12/memory-manager-configuration-changes-in-sql-server-2012.aspx

SQL Server 2012 内存管理 (memory management) 改进