首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 記憶體管理優化:限制緩衝集區大小釋放系統資源給其他應用程式

     編輯:關於SqlServer

案例:記憶體升級後 SQL Server 佔用過高擠壓共存應用

環境:Windows Server 2003,RAM 512MB → 1GB。升級後 SQL Server 工作集從 400MB 飆升至 900MB+,導致同機其他應用程式出現「記憶體配置不足」錯誤。

根因:緩衝集區動態增長機制

  • SQL Server 啟動後根據作業系統回報的可用實體記憶體,動態擴大緩衝集區。
  • 目標:維持可用實體記憶體在 4MB~10MB 區間 (避免 OS 頻繁分頁)。
  • 結果:只要有「免費」記憶體,SQL Server 就會佔用,**不會主動釋放給其他非 SQL Server 應用程式**,除非 OS 發出低記憶體通知 (WM_LOWMEMORY) 或 SQL Server 內部壓力偵測。

解決方案:設定最大伺服器記憶體

透過 SSMS (Enterprise Manager) 圖形化介面或 T-SQL 限制緩衝集區上限,為 OS 與其他應用保留記憶體。

方法一:SSMS 圖形化介面 (SQL 2000/2005+)

  1. 右鍵伺服器實例 → 屬性 (Properties)。
  2. 選擇 記憶體 (Memory) 索引標籤。
  3. 取消勾選「動態配置記憶體」或直接設定:
  • Minimum server memory (MB):建議 0 (允許釋放) 或保留基礎量 (如 256 MB)。
  • Maximum server memory (MB):關鍵設定。依總記憶體預留 OS (1-2 GB) + 其他應用需求。
    本案例 1GB RAM:建議設 600~700 MB (留 300-400 MB 給 OS/其他應用)。

方法二:T-SQL 腳本 (適用自動化部署)

-- 顯示進階選項
EXEC sp_configure 'show advanced options', 1; RECONFIGURE;

-- 設定最大記憶體 700 MB (單位 MB)
EXEC sp_configure 'max server memory (MB)', 700; RECONFIGURE;

-- 設定最小記憶體 128 MB (視需求)
EXEC sp_configure 'min server memory (MB)', 128; RECONFIGURE;

-- 驗證
EXEC sp_configure 'max server memory (MB)';
EXEC sp_configure 'min server memory (MB)';

進階選項:固定記憶體大小

  • 若將 min server memory = max server memory = 同一數值 (如 700 MB),等同勾選「使用固定記憶體大小」。
  • 優點:完全可預測記憶體佔用,避免動態調整開銷。缺點:啟動較慢 (需預先配置),無法應對臨時記憶體壓力釋放。

生效與驗證

  • 設定後 **建議重啟 SQL Server 服務** 使記憶體管理器立即重新平衡 (雖動態生效,重啟最徹底)。
  • 驗證:效能監視器 → SQL Server:Memory Manager → Total Server Memory (KB) 應穩定在設定上限附近。
  • 查詢 DMV (SQL 2005+):SELECT * FROM sys.dm_os_process_memory;

最佳實踐建議 (現代版本 SQL 2012+)

  1. 專用伺服器原則:生產資料庫伺服器**勿共存**其他記憶體密集型應用 (SSIS, SSRS, IIS, AV 掃描)。
  2. Max Server Memory 設定公式:
    Total RAM - (OS Reserve 1-4 GB) - (Other SQL Components: SSAS/SSRS/SSIS/Non-Buffer Pool) - (Cluster/HA Overhead)。
  3. 啟用鎖定記憶體頁面 (Lock Pages in Memory - LPIM):授予 SQL Server 服務帳號 `SeLockMemoryPrivilege`,防止 OS 將 Buffer Pool 分頁至磁碟 (需 Enterprise Edition / Standard 2016 SP1+)。配合 Max Memory 設定使用。
  4. 監控告警:設定 `Available MBytes` < 500 MB 或 `Target Server Memory > Max Server Memory` 持續告警。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved