SQLSERVER中的AWE功能
由於32位Windows用戶進程有4GB的虛擬地址空間。其中2GB給核心態,剩下2GB給用戶態。這兩部分嚴格分開。Windows不會因為其中某一塊
內存地址空間用盡而將另外一塊的空間讓出。
由於SQLSERVER的絕大部分指令都運行在用戶態下,就是說SQLSERVER的內存基本上使用用戶態地址空間資源。現在的情況是2GB地址空間資源
對於SQLSERVER來說嚴重阻礙了SQLSERVER有效利用硬件資源
所以SQLSERVER引入了AWE address windowsing extensions(地址空間擴展)。這是允許32位應用程序分配64GB物理內存,並把視圖或窗口
映射到2GB虛擬地址空間的機制。
使用AWE,使得一個應用程序能夠訪問最多達64GB的物理內存!!!
在SQL2000的企業版,SQL2005/2008的企業版和標准版都支持這個技術,也能夠享受這個技術帶來的好處
開啟這個功能的語句,執行完之后,重啟SQLSERVER服務即可
1 EXEC sys.sp_configure @configname = 'AWE Enabled', -- varchar(35) 2 @configvalue = 1 -- int 3 RECONFIGURE 4 GO
AWE具體實現圖
有幾點需要注意的:
(1)開啟這個功能需要SQLSERVER啟動帳戶在Windows上的lock pages in memory權限。沒有這個權限,AWE就不能成功被開啟。
啟動的SQLSERVER這時候只能使用2GB的地址空間。
所以DBA要確認一下SQLSERVER的errorlog里有沒有相關的信息
成功開啟:server Address Windowing Extensions enabled
消息
Address Windowing Extensions is enabled. This is an informational message only; no user action is required.
開啟失敗:Cannot use Address Windowing Extensions because lock memory privilege was not granted
(2)這個功能是在應用層面有意識地使用,而不是在Windows層面實施的。也就是說SQLSERVER在申請內存時,通過特殊API調用申請到的,
如果SQLSERVER不調用這個功能,就還會在普通的2GB虛擬地址空間申請內存。在SQLSERVER中不是所有的內存申請都會調用AWE技術,
只有先reserve,再commit的內存調用,SQLSERVER才使用AWE讓他們使用到擴展的內存。其他方式申請的內存只能使用普通的2GB地址空間。
正因為這樣,AWE不能稱為解決SQLSERVER地址空間不足的最終解決方案。使用64位的服務器,虛擬地址空間可以達到8TB,
大於現在絕大多數的單個服務器的物理內存數。在64位下運行的SQLSERVER,其性能往往比在32位上有比較明顯的提高。
最后附上各個版本Windows上支持的最大內存數
配置 應用虛擬地址空間大小 最大物理內存數 是否支持AWE/locked pages support
32位SQLSERVER 2GB 64GB YES
32位SQLSERVER + /3GB boot.ini參數 3GB 16GB YES
32位SQLSERVER 應用在x64位操作系統(WOW) 4GB 64GB YES
32位SQLSERVER 應用在IA64操作系統(WOW) 2GB 2GB NO
64位SQLSERVER 應用在x64操作系統 8TB 2TB YES
64位SQLSERVER 應用在IA64操作系統 7TB 2TB YES