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

釋放 SQL Server 佔用記憶體:DBCC 清理快取與動態調整最大記憶體雙管齊下

     編輯:關於SqlServer

SQL Server 預設「有多少佔多少」,僅在系統可用記憶體約剩 4MB 時被動釋放。主動釋放需雙管齊下:清理快取釋放邏輯佔用、動態調整 max server memory 強迫歸還物理記憶體。

第一層:清理四大快取 (邏輯釋放,不歸還物理記憶體)

DBCC FREEPROCCACHE;        -- 預存程序編譯快取
DBCC FREESESSIONCACHE;     -- 會話快取
DBCC FREESYSTEMCACHE('All'); -- 所有系統快取
DBCC DROPCLEANBUFFERS;     -- 資料緩衝區 (乾淨頁)

⚠️ 此四命令僅清除快取內容,供新快取使用,**SQL Server 不會因此釋放已配置的物理記憶體**。

第二層:動態調整最大記憶體 (強迫歸還物理記憶體)

透過 sp_configure 動態降低再升高上限,強迫 SQL Server 釋放多餘物理頁框:

USE master;
EXEC sp_configure 'show advanced options', 1; RECONFIGURE WITH OVERRIDE;
EXEC sp_configure 'max server memory (MB)', 1024; RECONFIGURE WITH OVERRIDE; -- 降至 1GB
EXEC sp_configure 'max server memory (MB)', 5120; RECONFIGURE WITH OVERRIDE; -- 恢復 5GB
EXEC sp_configure 'show advanced options', 0; RECONFIGURE WITH OVERRIDE;

SSMS 圖形化同樣可行:實例右鍵→屬性→記憶體→修改「最大伺服器記憶體」。

原理說明

  • 降低上限 → SQL Server 必須將超出部分的資料頁從 Buffer Pool 淘汰寫入磁碟 (若髒頁) 或直接丟棄 (乾淨頁),物理記憶體歸還 OS
  • 升高上限 → 重新獲得配額,後續查詢重新載入熱資料
  • 過程可能引發短暫效能抖動 (大量 I/O),建議低峰期操作

適用場景與注意事項

  • 共用伺服器需暫時騰出記憶體給其他應用
  • 記憶體洩漏疑似、快取汙染導致計畫品質下降
  • 不可頻繁劇烈震盪上限,影響穩定性
  • 生產環境建議固定合理上限 (如總記憶體 80-90%),避免 OS 記憶體壓力導致分頁

掌握「清快取 + 調上限」組合拳,讓 SQL Server 記憶體管理從被動接受轉為主動可控。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved