首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

大記憶體 SQL Server 加速指南:3GB/4GB+ 配置、AWE、鎖定頁面、最大記憶體管理

     編輯:MySQL 資料庫相關知識

32 位元 Windows (Server 2003/2008) 預設僅給用戶模式 2GB 記憶體,SQL Server 實際可用更少。透過 /3GB 啟動參數、啟用 AWE (Address Windowing Extensions)、鎖定記憶體頁面、設定 max server memory,可突破 4GB 限制,將多餘記憶體轉化為緩衝池,大幅提升查詢效能。本文提供完整配置步驟與多實例記憶體分配策略。

一、啟用 3GB 用戶模式空間 (/3GB)

# 1. 編輯 boot.ini (Server 2003) 或 bcdedit (Server 2008/Vista+)
# Server 2003:
# [boot loader]
# timeout=30
# default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
# [operating systems]
# multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows Server 2003" /fastdetect /3GB

# Server 2008+:
bcdedit /set IncreaseUserVa 3072

# 2. 重啟作業系統
shutdown /r /t 0

效果:用戶模式虛擬地址空間從 2GB → 3GB,核心模式 1GB。SQL Server 進程可定址 3GB,Buffer Pool 可擴大 ~1GB。

二、啟用 AWE 突破 4GB 物理記憶體限制

前提:Enterprise/Datacenter Edition、物理記憶體 > 4GB、已啟用 /3GB 或 /PAE (Physical Address Extension)。

-- 1. 授予「鎖定記憶體頁面」權限 (本地安全性原則)
# 控制台 → 管理工具 → 本地安全性原則 → 本地原則 → 使用者權利指派
# 「鎖定記憶體中的頁面」 → 添加 SQL Server 服務帳號 (如 DOMAIN\sqlsvc)

-- 2. 啟用 AWE (需 sysadmin)
EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
EXEC sp_configure 'awe enabled', 1; RECONFIGURE;
-- 重啟 SQL Server 服務生效
-- 忽略錯誤訊息 "AWE requires 32-bit..." (舊版 Bug,不影響功能)

-- 3. 限制檔案系統緩存佔用記憶體
# 網路連線 → 區域連線 → 內容 → 檔案與印表機共享 → 內容
# 取消勾選「最大化網路應用程式資料輸送量」 (優化為「最小化記憶體使用」)

三、設定 max server memory (關鍵保護機制)

啟用 AWE 後,SQL Server 啟動時會**積極鎖定幾乎所有可用物理記憶體** (「佔著茅坑不拉屎」),擠壓作業系統與其他應用。必須設定上限。

-- 單實例:預留 2-4GB 給 OS
EXEC sp_configure 'max server memory (MB)', 12288; -- 16GB 機器留 4GB
RECONFIGURE;

-- 多實例 (SQL 2000 需手動分配,2005+ 支援動態平衡但建議手動)
-- 實例 A (ERP) 8GB
EXEC sp_configure 'max server memory (MB)', 8192; RECONFIGURE;
-- 實例 B (CRM) 4GB
EXEC sp_configure 'max server memory (MB)', 4096; RECONFIGURE;
-- 合計 ≤ 物理記憶體 - OS 預留

四、大記憶體維護管理三大關鍵點

場景風險對策
單實例 + AWESQL Server 鎖定所有記憶體,OS 交換、服務凍結強制設定 max server memory,預留 2-4GB OS
多實例 (SQL 2000)第一個啟動的實例搶佔所有記憶體每個實例必須設定 max server memory
多實例 (SQL 2005+)動態平衡可能不符業務優先級仍建議手動設定 max server memory,按業務權重分配
升級記憶體新記憶體未被 SQL Server 使用重啟 SQL Server 服務 (AWE 需重啟感知新記憶體)
共存其他應用 (Exchange、IIS、檔案服務)記憶體爭用導致非 SQL 服務異常先測量其他應用基準記憶體需求,升級後優先滿足再分配給 SQL

五、驗證腳本

-- 確認 AWE 啟用
SELECT * FROM sys.dm_os_process_memory
WHERE physical_memory_in_use_kb > 4194304; -- > 4GB

-- 確認鎖定頁面
SELECT sql_memory_model_desc FROM sys.dm_os_process_memory;
-- 期望輸出: 'LOCK_PAGES_ALLOCATOR' 或 'AWE_ALLOCATOR'

-- 監控記憶體使用
SELECT
    (physical_memory_in_use_kb/1024) AS SQL_Memory_MB,
    (locked_page_allocations_kb/1024) AS Locked_Pages_MB,
    (virtual_address_space_reserved_kb/1024) AS VAS_Reserved_MB
FROM sys.dm_os_process_memory;

六、現代環境建議 (2024)

  • 全面遷移至 64 位元 SQL Server 2019/2022 + Windows Server 2019/2022:原生支援 TB 級記憶體,無需 AWE、/3GB、PAE 等繁瑣配置。
  • 64 位元環境下,max server memory 仍為核心參數,建議設定為 物理記憶體 * 0.8 (扣除 OS、SSIS、SSAS、其他進程)。
  • 啟用 Lock Pages in Memory 權限 (64 位元同樣適用),防止 Buffer Pool 被分頁到磁碟。
  • 使用 Resource Governor 限制特定工作負載記憶體授予,避免惡意查詢佔盡記憶體。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved