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 記憶體管理從被動接受轉為主動可控。