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

SQL Server 記憶體釋放與管理策略

     編輯:關於SqlServer

記憶體管理機制

SQL Server 採「有多少用多少」策略,除非系統可用記憶體極低(約剩 4MB),否則不主動釋放。佔用記憶體主要作為資料快取(Data Cache)與程序快取(Procedure Cache)。

清除快取命令(不釋放記憶體給 OS)

DBCC FREEPROCCACHE        -- 清除程序快取
DBCC FREESESSIONCACHE     -- 清除會話快取
DBCC FREESYSTEMCACHE('All') -- 清除所有系統快取
DBCC DROPCLEANBUFFERS     -- 清除乾淨資料頁快取

以上指令僅清除快取內容,SQL Server 進程佔用的實體記憶體不會歸還作業系統。

強制釋放記憶體給 OS:動態調整 max server memory

  1. 透過 Management Studio:右鍵伺服器 → 屬性 → 記憶體 → 調整「最大伺服器記憶體」。
  2. 透過 T-SQL:
    -- 查看目前設定
    SELECT * FROM sys.dm_os_performance_counters
    WHERE counter_name IN ('Target Server Memory (KB)','Total Server Memory (KB)');
    
    -- 設定最小/最大記憶體
    EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
    EXEC sp_configure 'max server memory', 256; -- 限制 256 MB
    RECONFIGURE;
    -- 待記憶體釋放後恢復
    EXEC sp_configure 'max server memory', 2147483647; RECONFIGURE;
    EXEC sp_configure 'show advanced options', 0; RECONFIGURE;

建立強制釋放預存程序

CREATE PROC reclaimmemory AS
BEGIN
    DBCC FREEPROCCACHE;
    DBCC FREESESSIONCACHE;
    DBCC FREESYSTEMCACHE('All');
    DBCC DROPCLEANBUFFERS;
    EXEC sp_configure 'max server memory', 256; EXEC('RECONFIGURE');
    WAITFOR DELAY '00:00:05';
    EXEC sp_configure 'max server memory', 2147483647; EXEC('RECONFIGURE');
END

執行 reclaimmemory 即可強制釋放記憶體。

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