SQL Server 快取清除與記憶體釋放

2021-09-29 19:47:12 字數 4259 閱讀 5956

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

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

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

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

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

--清除儲存過程快取  

dbcc freeproccache      

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

--清除會話快取 

dbcc freesessioncache  

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

--清除系統快取 

dbcc freesystemcache('all') 

--注:free syste mcache 

--清除所有快取 

dbcc dropcleanbuffers 

--注: drop clean buffers 

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

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

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

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

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_namein('target server memory (kb)','total server memory (kb)')  

-- 記憶體狀態  

dbcc memorystatus  

--檢視最小最大記憶體  

select configuration_idasid,nameas 名稱,minimumas配置最小值,maximumas 最大值,  

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

description as 描述 fromsys.configurations 

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

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

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

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

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

--清除儲存過程快取  

dbcc freeproccache      

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

--清除會話快取 

dbcc freesessioncache  

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

--清除系統快取 

dbcc freesystemcache('all') 

--注:free syste mcache 

--清除所有快取 

dbcc dropcleanbuffers 

--注: drop clean buffers 

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

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

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

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

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_namein('target server memory (kb)','total server memory (kb)')  

-- 記憶體狀態  

dbcc memorystatus  

--檢視最小最大記憶體  

select configuration_idasid,nameas 名稱,minimumas配置最小值,maximumas 最大值,  

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

description as 描述 fromsys.configurations 

清除SQL Server快取

1 強制釋放記憶體 2create procedure dbo clearmemory 3as 4begin 5 清除儲存過程快取 6dbcc freeproccache 7 清除會話快取 8dbcc freesessioncache 9 清除系統快取 10 dbcc freesystemcache...

SQL Server 快取清除與記憶體釋放

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

4 在各種頁面內清除IE快取

這個不是什麼指令碼或者控制項控制,這是網頁瀏覽的機制決定的,所有訪問的東西都會被放到本地的快取區里.你想不讓客戶端不快取,你加上幾句語句就可以了.禁用客戶端快取 html asp response.expires 1 response.expiresabsolute now 1 response.c...