SQL Server內存占用過多,如何釋放?

由于Sql Server對于系統內存的管理策略是有多少占多少,除非系統內存不夠用了(大約到剩余內存為4M左右), Sql Server才會釋放一點點內存。所以很多時候,我們會發現運行Sql Server的系統內存往往居高不下。 護衛 神 教程整理 這些內存一般都是Sql Server運

由于Sql Server對于系統內存的管理策略是有多少占多少,除非系統內存不夠用了(大約到剩余內存為4M左右),?
Sql Server才會釋放一點點內存。所以很多時候,我們會發現運行Sql Server的系統內存往往居高不下。護衛教程整理?
這些內存一般都是Sql Server運行時候用作緩存的,例如你運行一個select語句,?
那么Sql Server會將相關的數據頁(Sql Server操作的數據都是以頁為單位的)加載到內存中來,?
下一次如果再次請求此頁的數據的時候,就無需讀取磁盤了,大大提高了速度。這類的緩存叫做數據緩存。?
還有一些其他類型的緩存,如執行存儲過程時,Sql Server需要先編譯再運行,編譯后的結果也會緩存起來,?
下一次就無需再次編譯了。

這里有網友專門寫了一個工具,用以實現這Sql Server內存占用過多時候釋放內存,截圖如下:
SQL Server內存占用過多,如何釋放?
SQLserver 內存釋放工具下載地址:猛擊我下載!
以下是軟件實現的大概思路:
如果這些緩存已經不需要了,那么我們可以調用以下幾個DBCC管理命令來清理這些緩存:?
DBCC FREEPROCCACHE?
DBCC FREESESSIONCACHE?
DBCC FREESYSTEMCACHE(‘All’)?
DBCC DROPCLEANBUFFERS?

這幾個命令分別用來清除存儲過程相關的緩存、會話緩存、系統緩存以及所有所有緩存?
但是需要注意的是,這幾個命令雖然會清除掉現有緩存,為新的緩存騰地方,?
但是Sql server并不會因此釋放掉已經占用的內存。無奈的是,Sql Server?
并沒有提供任何命令允許我們釋放不用到的內存。因此我們只能通過動態調整?
Sql Server可用的物理內存設置來強迫它釋放內存。?

我們也可以通過Sql Server Management企業管理器進行動態控制。?
連接到企業管理器之后打開Sql Server實例的屬性面板,?
找到內存設置,改變其中的最大服務器內存使用即可?

–內存使用情況? ???
SELECT * FROM sys.dm_os_performance_counters?
WHERE counter_name IN (‘Target Server Memory (KB)’,’Total Server Memory (KB)’)?

— 內存狀態?
DBCC MemoryStatus?

–查看最小最大內存?
SELECT?
cfg.name AS [Name],?
cfg.configuration_id AS [Number],?
cfg.minimum AS [Minimum],?
cfg.maximum AS [Maximum],?
cfg.is_dynamic AS [Dynamic],?
cfg.is_advanced AS [Advanced],?
cfg.value AS [ConfigValue],?
cfg.value_in_use AS [RunValue],?
cfg.description AS [Description]?
FROM?
sys.configurations AS cfg?

–設置最小最大內存?護衛教程整理?
sp_configure ‘show advanced options’, 1?
go?
sp_configure ‘min server memory’, 0?
RECONFIGURE?
GO?

sp_configure ‘max server memory’, 2147483647?
RECONFIGURE?
GO?

sp_configure ‘max server memory’, 256?
RECONFIGURE?
GO?
sp_configure ‘show advanced options’, 0??

———————————————————————————————–
CREATE proc [dbo].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’ )
GO

end
–使用示例
/*
reclaimmemory

*/

? 版權聲明
THE END
喜歡就支持一下吧
點贊13 分享