32 位元進程虛擬位址空間 (VAS) 僅 4GB,系統預留 2GB,Buffer Pool 最高僅能使用 2GB。即便物理記憶體再大也無法突破。
將系統佔用從 2GB 降至 1GB,SQL Server 可用 VAS 增至 3GB。命令:
BCDEdit /set increaseuserva 3072
透過 PAE (Physical Address Extension) 將 CPU 定址擴展至 36 位 (64GB)。啟用 AWE 後,Buffer Pool 中的 Data Cache 使用 AllocateUserPhysicalPages 分配「鎖定記憶體」,不被分頁至磁碟;MemToLeave 與 Plan Cache 仍用 VirtualAlloc。
| API | 特性 | 適用場景 |
|---|---|---|
| VirtualAlloc | OS 層虛擬記憶體,記憶體壓力時可分頁至磁碟 | 預設所有分配、MemToLeave、Plan Cache |
| AllocateUserPhysicalPages | 直接對應頁表,鎖定於物理記憶體,不被分頁 | AWE 啟用後的 Data Cache (32位) / 64位啟用 LPIM 後的 Data Pages |
啟用 AWE 或 64 位元 LPIM 前,SQL Server 服務帳戶必須擁有「鎖定記憶體頁面」權限 (本機安全性原則 → 用戶權利指派)。否則啟動報錯:

設定方法:

64 位元 VAS 巨大 (8TB/16TB),理論無上限問題。但預設仍用 VirtualAlloc,記憶體壓力時頁面被交換出去,導致 Buffer Pool 頁面頻繁換入換出 (Churn),產生大量 I/O。可透過 sys.dm_exec_query_memory_grants 觀察等待記憶體的查詢。
64 位元無需開啟 AWE,僅需授予 LPIM 權限,Buffer Pool Data Pages 即改用 AllocateUserPhysicalPages 分配,徹底杜絕 Churn。
理解 VAS、Buffer Pool、MemToLeave、AWE/LPIM 機制,正確配置 Max Memory、LPIM、AWE,是解決 SQL Server I/O 瓶頸、穩定性問題的關鍵。許多看似 I/O 問題,根因往往在記憶體配置不當。