32 位 Windows 進程預設僅能定址 2GB 使用者空間 (核心佔 2GB)。資料庫伺服器常裝 4GB+ 實體記憶體,若無法利用則浪費。解決方案:
1. 啟用 /3GB 開關 (BCD 編輯)
- 修改
boot.ini (或 bcdedit) 加入 /3GB,使用者空間擴至 3GB,核心壓縮至 1GB。
- 需搭配
/PAE (Physical Address Extension) 讓 OS 看見 4GB 以上實體記憶體。
- SQL Server 啟動參數加入
-g 保留記憶體給非緩衝區配置 (如 CLR、擴展預存程序)。
2. 啟用 AWE (Address Windowing Extensions)
sp_configure 'awe enabled', 1; RECONFIGURE;
- SQL Server 以 AWE API 將資料頁對應至 4GB 以上實體記憶體,繞過 2GB/3GB 虛擬位址限制。
- 需授予服務帳號「鎖定記憶體頁面」權限 (Local Security Policy → Lock pages in memory)。
實測環境
- Windows Server 2003 Enterprise x86 + 8GB RAM
- SQL Server 2005 Enterprise x86
- 啟用
/3GB /PAE + AWE + -g256
- 目標記憶體設定 6GB,緩衝區快取命中率顯著提升,實體 IO 下降 40%+。
注意事項
- AWE 僅供 32 位 Enterprise/Datacenter 版使用;64 位元版本原生支援大量記憶體,無需 AWE。
/3GB 可能導致核心資源耗盡 (PTE、Non-paged pool),高負載下需監控核心記憶體。
- 現代部署建議直接採用 64 位元 SQL Server + 64 位元 OS,徹底解決記憶體上限問題。