轉自 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 的記憶體使用了。更多記憶體管理資訊,可以參考: