ms sql server快取清除與記憶體釋放

2021-09-07 17:49:15 字數 2176 閱讀 1530

ms sql server快取清除與記憶體釋放

sql server系統記憶體管理在沒有配置記憶體最大值,很多時候我們會發現執行sql server的系統記憶體往往居高不下。這是由於他對於記憶體使用的策略是有多少閒置的記憶體就占用多少,直到記憶體使用慮達到系統峰值時(預留記憶體根據系統預設預留使用為準,至少4m),才會清除一些快取釋放少量的記憶體為新的快取騰出空間。

這些記憶體一般都是sql server執行時候用作快取的,例如你執行乙個select語句, 執行個儲存過程,呼叫函式;

1. 資料快取:執行個查詢語句,sql server會將相關的資料頁(sql server操作的資料都是以頁為單位的)載入到記憶體中來, 下一次如果再次請求此頁的資料的時候,就無需讀取磁碟了,大大提高了速度。

2.執行命令快取:在執行儲存過程,自定函式時,sql server需要先二進位制編譯再執行,編譯後的結果也會快取起來, 再次呼叫時就無需再次編譯。

在我們執行完相應的查詢語句,或儲存過程,如果我們不在需要這些快取,我可以將它清除,dbcc管理命令快取清除如下:

--清除儲存過程快取

dbcc freeproccache      

--注:方便記住關鍵字freeproccache 可以拆解成free(割捨,清除) proc(儲存過程關鍵字簡寫),cache(快取)

--清除會話快取

dbcc freesessioncache  

--注:free(割捨,清除) session(會話)cache(快取)

--清除系統快取

dbcc freesystemcache('all') 

--注:free syste mcache 

--清除所有快取

dbcc dropcleanbuffers 

--注:drop clean buffers 

雖然我們已經清除了快取,但是sql並未釋放相應占用的記憶體。 它只是騰出新的空間為之後所執行指令碼所用。sql server  並沒有提供任何命令允許我們釋放不用到的記憶體。因此我們只能通過動態調整 sql server可用的物理記憶體設定來強迫它釋放記憶體。

操作原理是調整記憶體配置大小。手動操作方法:

1.開啟sql server management(企業管理器);

2.開啟sql server例項的屬性面板;

3.找到記憶體設定,改變其中的最大伺服器記憶體使用即可 。

使用指令碼操作:

--強制釋放記憶體

create procedure [dbo].clearmemory   

as  

begin 

--清除所有快取

dbcc dropcleanbuffers 

--開啟高階配置

exec sp_configure'show advanced options', 1 

--設定最大記憶體值,清除現有快取空間

exec sp_configure'max server memory', 256 

exec ('reconfigure') 

--設定等待時間

waitfor delay '00:00:01' 

--重新設定最大記憶體值

exec  sp_configure'max server memory',4096 

exec ('reconfigure') 

--關閉高階配置

exec sp_configure'show advanced options',0 

go 

下面提供記憶體檢視功能的一些指令碼語句:

--記憶體使用情況

select * from sys.dm_os_performance_counters  

where counter_name in('target server memory (kb)','total server memory (kb)')  

-- 記憶體狀態

dbcc memorystatus  

--檢視最小最大記憶體

select configuration_idas id,name as 名稱,minimum as配置最小值, maximumas 最大值,  

is_dynamic as 是否動態值, is_advanced as 是否優先, value_in_use as 執行值,  

description as 描述 from sys.configurations 

ms sql server快取清除與記憶體釋放

sql server系統內 存管理在沒有配置記憶體最大值,很多時候我們會發現執行sql server的系統記憶體往往居高不下。這是由於他對於記憶體使用的策略是有多少閒置的記憶體就占用多少,直到記憶體使用慮達到系統峰值時 預留記憶體根據系統預設 預留使用為準,至少4m 才會清除一些快取釋放少量的記憶體...

ms sql server快取清除與記憶體釋放

ms sql server快取清除與記憶體釋放 sql server系統記憶體管理在沒有配置記憶體最大值,很多時候我們會發現執行sql server的系統記憶體往往居高不下。這是由於他對於記憶體使用的策略是有多少閒置的記憶體就占用多少,直到記憶體使用慮達到系統峰值時 預留記憶體根據系統預設預留使用為...

AJAX清除快取

在使用ajax作web開發時,往往會存在一些莫名其妙的問題。如,第一次的ajax請求是正常的,而第二次為什麼就不正常了呢,而且往往會出現於第一次請求同樣的結果。其實這是因為ajax第一次請求確實是傳送到了伺服器,而第二次並沒有真的發到伺服器,而是從ie的快取中讀取的。那麼如何解決這一問題呢?方法很簡...