SQL Server 2008 或者R2的默認內存分配是2147483647MB, 差很少算是無窮大,對於系統內存的管理策略是有多少佔多少。SQLserver會把全部處理過的SQL操做緩存在內存裏,這樣就不用總去讀硬盤了。可是若是長時間運行SQL Server, 系統內存被用的差很少,再開啓其餘程序就有可能會報內存不足。這時候就須要釋放內存緩存啦。通常我用如下兩種辦法:緩存
這種方法最簡單有效,可是隻能臨時的清除SQLServer緩存所佔的內存空間,時間長了SQLServer還會把內存佔滿。並且很重要的是這種方法不能在SQLserver有鏈接的狀況下使用,那樣會讓正在使用SQLServer的用戶暫時沒法鏈接SQLServer,甚至致使程序處錯誤。而你做爲管理員就……服務器
DBCC FREEPROCCACHE學習
DBCC FREESESSIONCACHEorm
DBCC FREESYSTEMCACHE('All')server
DBCC DROPCLEANBUFFERS內存
以上一段通常能釋放緩存,(注意引號有的時候由於word文檔裏打不出英文的引號,最好拷到記事本里編輯一下)可是有的時候不是很管用。由於SQLserver不會由於Cache(緩存)釋放了而釋放內存,佔了茅坑不必定XX。此命令只會讓SQLServer不會繼續佔領新的內存,按期執行一下還能夠。關鍵是還要釋放一下內存。文檔
經過如下Query 能夠看出當前服務器所佔內存狀況get
SELECT * FROM sys.dm_os_performance_countersio
WHERE counter_name IN ('Target Server Memory (KB)','Total Server Memory (KB)')form
Target Server Memory(KB)和 Total Server Memory(KB)字面意思所得就是目標和當前SQL Server所佔的內存大小。
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
其實我用這幾句也不是很奏效,時間一長仍是可能會有內存不夠的狀況。
******
總的來講個人管理辦法是:
EXEC sp_configure 'show advanced options', 1 -- 這句是打開advanced options
GO
EXEC sp_configure 'max server memory', 9216 -- 設置最大內存爲9G,咱們server 內存是16G的,留下7G足夠了
EXEC ('RECONFIGURE' )
GO
EXEC sp_configure 'show advanced options', 0 --記得用完了把advanced options關掉
GO
DBCC FREEPROCCACHE
DBCC FREESESSIONCACHE
DBCC FREESYSTEMCACHE('All')
DBCC DROPCLEANBUFFERS
這個清緩存也很頭疼,不知道何時合適,就這樣吧,管他呢,我又不是專家,出了問題大不了來機器不行。或者寫個Procedure,用job按期執行。
沒辦法,SQLServer太霸道了,以上方法不是萬全之策,建議仍是把SQLServer放到一邊單獨用吧。