sqlserver內(nèi)存釋放心得
SQL Server 2008 或者R2的默認內(nèi)存分配是2147483647MB, 差不多算是無窮大,對于系統(tǒng)內(nèi)存的管理策略是有多少占多少。SQLserver會把所有處理過的SQL操作緩存在內(nèi)存里,這樣就不用總?cè)プx硬盤了。但是如果長時間運行SQL Server, 系統(tǒng)內(nèi)存被用的差不多,再開啟其他程序就有可能會報內(nèi)存不足。這時候就需要釋放內(nèi)存緩存啦。一般我用以下兩種辦法:
這種方法最簡單有效,但是只能臨時的清除SQLServer緩存所占的內(nèi)存空間,時間長了SQLServer還會把內(nèi)存占滿。而且很重要的是這種方法不能在SQLserver有連接的情況下使用,那樣會讓正在使用SQLServer的用戶暫時無法連接SQLServer,甚至導(dǎo)致程序處錯誤。而你作為管理員就……
DBCC FREEPROCCACHE
DBCC FREESESSIONCACHE
DBCC FREESYSTEMCACHE('All')
DBCC DROPCLEANBUFFERS
以上一段一般能釋放緩存,(注意引號有的時候因為word文檔里打不出英文的引號,最好拷到記事本里編輯一下)但是有的時候不是很管用。因為SQLserver不會因為Cache(緩存)釋放了而釋放內(nèi)存,占了茅坑不一定XX。此命令只會讓SQLServer不會繼續(xù)占領(lǐng)新的內(nèi)存,定期執(zhí)行一下還可以。關(guān)鍵是還要釋放一下內(nèi)存。
通過以下Query 可以看出當前服務(wù)器所占內(nèi)存情況
SELECT * FROM sys.dm_os_performance_counters
WHERE counter_name IN ('Target Server Memory (KB)','Total Server Memory (KB)')
Target Server Memory(KB)和 Total Server Memory(KB)字面意思所得就是目標和當前SQL Server所占的內(nèi)存大小。
EXEC sp_configure 'show advanced options', 1
GO
EXEC sp_configure 'max server memory', 256
EXEC ('RECONFIGURE' )
WAITFOR DELAY '00:00:05'
EXEC sp_configure 'max server memory', 2147483647
EXEC ('RECONFIGURE' )
GO
EXEC sp_configure 'show advanced options', 0
GO
其實我用這幾句也不是很奏效,時間一長還是可能會有內(nèi)存不夠的情況。
******
總的來說我的管理辦法是:
EXEC sp_configure 'show advanced options', 1 -- 這句是打開advanced options
GO
EXEC sp_configure 'max server memory', 9216 -- 設(shè)置最大內(nèi)存為9G,我們server 內(nèi)存是16G的,留下7G足夠了
EXEC ('RECONFIGURE' )
GO
EXEC sp_configure 'show advanced options', 0 --記得用完了把advanced options關(guān)掉
GO
DBCC FREEPROCCACHE
DBCC FREESESSIONCACHE
DBCC FREESYSTEMCACHE('All')
DBCC DROPCLEANBUFFERS
這個清緩存也很頭疼,不知道什么時候合適,就這樣吧,管他呢,我又不是專家,出了問題大不了來機器不行?;蛘邔憘€Procedure,用job定期執(zhí)行。
沒辦法,SQLServer太霸道了,以上方法不是萬全之策,建議還是把SQLServer放到一邊單獨用吧。