轉(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才會(huì)釋放一點(diǎn)點(diǎn)內(nèi)存。所以很多時(shí)候,我們會(huì)發(fā)現(xiàn)運(yùn)行Sql Server的系統(tǒng)內(nèi)存往往居高不下。
這些內(nèi)存一般都是Sql Server運(yùn)行時(shí)候用作緩存的,例如你運(yùn)行一個(gè)select語句,那么Sql Server會(huì)將相關(guān)的數(shù)據(jù)頁(Sql Server操作的數(shù)據(jù)都是以頁為單位的)加載到內(nèi)存中來,下一次如果再次請求此頁的數(shù)據(jù)的時(shí)候,就無需讀取磁盤了,大大提高了速度。這類的緩存叫做數(shù)據(jù)緩存。還有一些其他類型的緩存,如執(zhí)行存儲(chǔ)過程時(shí),Sql Server需要先編譯再運(yùn)行,編譯后的結(jié)果也會(huì)緩存起來,下一次就無需再次編譯了。如果這些緩存已經(jīng)不需要了,那么我們可以調(diào)用以下幾個(gè)DBCC管理命令來清理這些緩存:
DBCC FREEPROCCACHE DBCC FREESESSIONCACHE DBCC FREESYSTEMCACHE('All') DBCC DROPCLEANBUFFERS
這幾個(gè)命令分別用來清除存儲(chǔ)過程相關(guān)的緩存、會(huì)話緩存、系統(tǒng)緩存以及所有所有緩存。詳細(xì)的使用參考MSDN。
但是需要注意的是,這幾個(gè)命令雖然會(huì)清除掉現(xiàn)有緩存,為新的緩存騰地方,但是Sql server并不會(huì)因此釋放掉已經(jīng)占用的內(nèi)存。無奈的是,Sql Server并沒有提供任何命令允許我們釋放不用到的內(nèi)存。因此我們只能通過動(dòng)態(tài)調(diào)整Sql Server可用的物理內(nèi)存設(shè)置來強(qiáng)迫它釋放內(nèi)存。
USE master -- 打開高級(jí)設(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)行動(dòng)態(tài)控制。連接到企業(yè)管理器之后打開Sql Server實(shí)例的屬性面板,找到內(nèi)存設(shè)置,改變其中的最大服務(wù)器內(nèi)存使用即可。
——Kevin Yang
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com