SQL Server 2012 記憶體管理 (memory management) 改進

stswordman發表於2013-08-06

轉自 http://blogs.msdn.com/b/apgcdsd/archive/2013/07/11/sql-server-2012-memory-management.aspx

SQL Server 2012 的記憶體管理和以前的版本相比,有以下的一些變化。

一.記憶體分配器的變化

SQL Server 2012以前的版本,比如SQL Server 2008 R2等,single page allocator multi page allocator也就是說,如果申請的記憶體是8k以內的,就會有單頁分配器分配,而大於8kb的記憶體請求,使用multi page 分配器來管理。所以,如果你執行DBCC MemoryStatus,你會發現這兩個分配器分配的記憶體情況:

 

如果你查詢memory clerk,也會發現single pages multi pages 兩列:

select * from sys.dm_os_memory_clerks

2012裡面就不一樣了,你會發現single page multi page字樣消失了,只剩下pages 字樣:

 

而下面的語句的輸出也是不一樣的:

select * from sys.dm_os_memory_clerks

 

 那麼為什麼會有這樣的變化呢?原因就是SQL Server 2012裡面不再有single page allocator multi page allocator,而是把它們統一起來了,叫做 any size page allocator下面的兩張圖可以看到這樣的變化:

SQL Server 2008 R2

SQL Server 2012


 

從上面的圖可以看出,SQL Server 2012 多了一個memory Manager,它來統一響應SQL Server 內部各種元件記憶體申請的請求。因為這個原因,在SQL Server 2012裡面,max server memory 不再像以前的版本那樣,只控制buffer pool的大小,也包括那些大於8kb 的記憶體請求。也就是, max server memory 能夠更準確地控制SQL Server 的記憶體使用了。更多記憶體管理資訊,可以參考:

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

相關文章