現象:工作管理員顯示 sqlservr.exe 僅佔用 88MB 記憶體,但伺服器實體記憶體 12GB、可用 8GB+。實際上 SQL Server 已正常使用大量記憶體,只是被鎖定在非分頁集區,不計入工作集合。
驗證真實記憶體使用:DMV 與效能計數器
-- DMV 查詢實際使用
SELECT physical_memory_in_use_kb, locked_page_allocations_kb, *
FROM sys.dm_os_process_memory;
-- 效能計數器 (PerfMon)
-- 物件: SQL Server: Memory Manager
-- 計數器: Total Server Memory (KB)
結果顯示 physical_memory_in_use_kb 約 2GB,證實 SQL Server 正常運作。
根因:Lock Pages in Memory (LPIM) 特權
- 錯誤日誌含訊息:
Large Page Extensions enabled. Large Page Allocated: 32MB。
- 啟用 LPIM 後,SQL Server 使用 AWE API 鎖定記憶體頁面,防止被作業系統分頁到磁碟。
- 鎖定頁面 不計入工作集合,導致工作管理員/工作集合計數器嚴重偏低。
32 位元 vs 64 位元 差異
| 架構 | AWE API 用途 |
| 32-bit | 突破 4GB 限制 / 啟用 AWE 功能 |
| 64-bit | 鎖定緩衝集區頁面、提升效能、防止分頁 |
Large Pages (大型頁面) 與 Trace Flag 834
- 僅啟用 LPIM 不會自動使用 Large Pages。
- 需啟用 Trace Flag 834 (啟動參數
-T834) 才會使用 Large Pages。
- 錯誤日誌出現
Using large pages for buffer pool. 才代表真正啟用。
監控建議
- 勿信任工作管理員 查看 SQL Server 記憶體。
- 使用 DMV: sys.dm_os_process_memory、PerfMon: Total Server Memory (KB)、sys.dm_os_memory_clerks。
- 設定 max server memory 留足作業系統與其他服務記憶體 (建議保留 4-8GB 或總量 10-15%)。
參考資源
- Fun with Locked Pages, AWE, Task Manager, and the Working Set (Microsoft 部落格)
- Why SQL Server is using so LESS memory (CSS SQL Server Engineers)
理解鎖定頁面機制,避免誤判記憶體壓力而錯誤調整設定。
- 上一篇文章: SQL Server 安裝失敗 sqlstp.log 提示「未發現資料來源」:ODBC 註冊表修復
- 下一篇文章: SQL Server 遞迴查詢父子層級資料:四層 CTE 與 IN 子查詢寫法
Copyright ©
程式碼之家 All Rights Reserved