天天看點

SQLSERVER吞噬記憶體解決記錄

現在手上有一個不大不小的系統,運作了一段時間,因為是24*7不斷運作,是以記憶體逐漸增高,慢慢的會飙到95%以上,然後不得不重新開機電腦,因為用的是雲,怕虛拟機重新開機down掉起不來,重新開機操作還隻能在淩晨4、5點人為弄,周而複始的搞很累,于是下決心找出來到底是什麼吞記憶體

SQLSERVER吞噬記憶體解決記錄
SQLSERVER吞噬記憶體解決記錄

以上兩張圖是系統的配置和記憶體占有情況,可以計算出來,在任務管理器中實際顯示使用的記憶體不到2G,而我4核8G的伺服器已經是相對不錯的配置了,到底是什麼東東占用了記憶體呢,為什麼沒有在任務管理器裡面顯示出來?

為了達到這個目的,我找到了微軟官方的工具 RAMMap

http://technet.microsoft.com/zh-cn/sysinternals/ff700229.aspx
SQLSERVER吞噬記憶體解決記錄

運作一看,AWE這條占了7G多,那AWE又是什麼呢,具體是哪個軟體導緻的呢?繼續往下挖

首先是AWE的定義,從這篇可以找到,可以看到AWE和SQL有關

http://blogs.technet.com/b/askperf/archive/2010/08/13/introduction-to-the-new-sysinternals-tool-rammap.aspx

于是找到這篇“Why does my SQL Server use AWE memory? and why is this not visible in RAMMap?”

http://serverfault.com/questions/558287/why-does-my-sql-server-use-awe-memory-and-why-is-this-not-visible-in-rammap

從标題基本已經可以猜測到了,這事肯定是SQLSERVER幹的,繼續往下了解

http://dba.stackexchange.com/questions/48504/awe-memory-usage-growing-with-sql-server-2012 http://blogs.msdn.com/b/psssql/archive/2009/09/11/fun-with-locked-pages-awe-task-manager-and-the-working-set.aspx

這兩篇會告訴你SQLSERVER和AWE的關系

http://technet.microsoft.com/zh-cn/library/ms178067(v=sql.105).aspx

這篇會告訴你如何限制SQLSERVER不停的吞噬記憶體,基本指令如下:

sp_configure 'show advanced options', 1;

GO

RECONFIGURE;

sp_configure 'max server memory', 4096; --設定最大可使用記憶體為4G

http://www.brentozar.com/archive/2011/09/sysadmins-guide-microsoft-sql-server-memory/

這篇會告訴你限制 max server memory已經不合适了,應該加記憶體了

以上,基本解決記憶體問題,随筆記錄