由於sql server對於系統記憶體的管理策略是有多少佔多少,除非系統記憶體不夠用了(大約到剩餘記憶體為4m左右),sql server才會釋放一點點記憶體。所以很多時候,我們會發現執行sql server的系統記憶體往往居高不下。
這些記憶體一般都是sql server執行時候用作快取的,例如你執行乙個select語句,那麼sql server會將相關的資料頁(sql server操作的資料都是以頁為單位的)載入到記憶體中來,下一次如果再次請求此頁的資料的時候,就無需讀取磁碟了,大大提高了速度。這類的快取叫做資料快取。還有一些其他型別的快取,如執行儲存過程時,sql server需要先編譯再執行,編譯後的結果也會快取起來,下一次就無需再次編譯了。如果這些快取已經不需要了,那麼我們可以呼叫以下幾個dbcc管理命令來清理這些快取:
dbcc freeproccache但是需要注意的是,這幾個命令雖然會清除掉現有快取,為新的快取騰地方,但是sql server並不會因此釋放掉已經占用的記憶體。無奈的是,sql server並沒有提供任何命令允許我們釋放不用到的記憶體。因此我們只能通過動態調整sql server可用的物理記憶體設定來強迫它釋放記憶體。dbcc freesessioncache
dbcc freesystemcache('all')
dbcc dropcleanbuffers
use master我們也可以通過sql server management企業管理器進行動態控制。連線到企業管理器之後開啟sql server例項的屬性面板,找到記憶體設定,改變其中的最大伺服器記憶體使用即可。-- 開啟高階設定配置 exec sp_configure 'show advanced options', 1
reconfigure with override
-- 先設定物理記憶體上限到1g exec sp_configure 'max server memory (mb)', 1024
reconfigure with override
-- 還原原先的上限 exec sp_configure 'max server memory (mb)', 5120
reconfigure with override
-- 恢復預設配置 exec sp_configure 'show advanced options', 0
reconfigure with override
或者:---定時自動釋放sql server占用記憶體 !!生產環境慎用!!
將停止與啟動mssqlserver服務的命令列做成批處理檔案,同時結合windows的「任務計畫」功能,來實現定時自動釋放sql server占用記憶體的方法,做法如下:
第一步,開啟記事本,輸入下列2行命令
net stop mssqlserver
net start mssqlserver
輸入完畢後,另存為 resetsqlserver.bat 批處理檔案。
第二步,在windows的「任務計畫」功能裡,新增一條新的任務計畫,讓系統在每天的03:00執行一次 resetsqlserver.bat 這個批處理檔案即可。
這樣一來,通過上面兩步我們就為伺服器增加了乙個定時自動釋放sql server占用記憶體的功能。
命令釋放SQL Server占用的記憶體
sql server 占用的記憶體不會自動釋放,可以通過設定最大記憶體的方式手動釋放 強制釋放記憶體 create procedure dbo clearmemory as begin 清除所有快取 dbcc dropcleanbuffers 開啟高階配置 exec sp configure sho...
用swap方法強行釋放STL容器占用的記憶體
1.vector容器的記憶體自增長 與其他容器不同,其記憶體空間只會增長,不會減小。先來看看 c primer 中怎麼說 為了支援快速的隨機訪問,vector容器的元素以連續方式存放,每乙個元素都緊挨著前乙個元素儲存。設想一下,當vector新增乙個元素時,為了滿足連續存放這個特性,都需要重新分配空...
用swap方法強行釋放STL容器占用的記憶體
專案中用到了vector,list,set等容器,執行完畢後需要清理,以釋放記憶體以降低記憶體開銷。一開始我直接使用clear 函式來釋放,實際觀察下來,記憶體並沒有被釋放。vector與deque不同,其記憶體占用空間只會增長,不會減小。比如你首先分配了10,000個位元組,然後erase掉後面9...