轉(zhuǎn)載至:http://www.imkevinyang.com/2009/09/%E9%87%8A%E6%94%BEsql-server%E5%8D%A0%E7%94%A8%E7%9A%84%E5%86%85%E5%AD%98.html 釋放 SQL Server 占用 的 內(nèi)存 技術(shù)隨筆 SQL,SQL Server, 內(nèi)存 , 內(nèi)存 釋放 由于Sql Server對于系統(tǒng) 內(nèi)存 的管理策略是有多少
技術(shù)隨筆 SQL, SQL Server, 內(nèi)存, 內(nèi)存釋放
由于Sql Server對于系統(tǒng)內(nèi)存的管理策略是有多少占多少,除非系統(tǒng)內(nèi)存不夠用了(大約到剩余內(nèi)存為4M左右),Sql Server才會釋放一點點內(nèi)存。所以很多時候,我們會發(fā)現(xiàn)運行Sql Server的系統(tǒng)內(nèi)存往往居高不下。
這些內(nèi)存一般都是Sql Server運行時候用作緩存的,例如你運行一個select語句,那么Sql Server會將相關(guān)的數(shù)據(jù)頁(Sql Server操作的數(shù)據(jù)都是以頁為單位的)加載到內(nèi)存中來,下一次如果再次請求此頁的數(shù)據(jù)的時候,就無需讀取磁盤了,大大提高了速度。這類的緩存叫做數(shù)據(jù)緩存。還有一些其他類型的緩存,如執(zhí)行存儲過程時,Sql Server需要先編譯再運行,編譯后的結(jié)果也會緩存起來,下一次就無需再次編譯了。如果這些緩存已經(jīng)不需要了,那么我們可以調(diào)用以下幾個DBCC管理命令來清理這些緩存:
DBCC FREEPROCCACHE DBCC FREESESSIONCACHE DBCC FREESYSTEMCACHE('All') DBCC DROPCLEANBUFFERS
這幾個命令分別用來清除存儲過程相關(guān)的緩存、會話緩存、系統(tǒng)緩存以及所有所有緩存。詳細(xì)的使用參考MSDN。
但是需要注意的是,這幾個命令雖然會清除掉現(xiàn)有緩存,為新的緩存騰地方,但是Sql server并不會因此釋放掉已經(jīng)占用的內(nèi)存。無奈的是,Sql Server并沒有提供任何命令允許我們釋放不用到的內(nèi)存。因此我們只能通過動態(tài)調(diào)整Sql Server可用的物理內(nèi)存設(shè)置來強(qiáng)迫它釋放內(nèi)存。
USE master -- 打開高級設(shè)置配置 EXEC sp_configure 'show advanced options', 1 RECONFIGURE WITH OVERRIDE -- 先設(shè)置物理內(nèi)存上限到1G EXEC sp_configure 'max server memory (MB)', 1024 RECONFIGURE WITH OVERRIDE -- 還原原先的上限 EXEC sp_configure 'max server memory (MB)', 5120 RECONFIGURE WITH OVERRIDE -- 恢復(fù)默認(rèn)配置 EXEC sp_configure 'show advanced options', 0 RECONFIGURE WITH OVERRIDE
我們也可以通過Sql Server Management企業(yè)管理器進(jìn)行動態(tài)控制。連接到企業(yè)管理器之后打開Sql Server實例的屬性面板,找到內(nèi)存設(shè)置,改變其中的最大服務(wù)器內(nèi)存使用即可。
——Kevin Yang
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com