[SQL][Troubleshooting]SQL Server 2005 AWE
最近接到一個求助案件,有朋友反映說在 Windows 2008 的環境下,不知道電腦中的記憶體到底被誰吃掉了,該電腦主要是執行 SQL Server 2005 和 Tomcat,想知道記憶體到底被誰吃掉了。於是請朋友先利用工作管理員把畫面傳過來看一下。
從上述的資訊中可以看出來,目前的 SQL Server 是 32 位元的版本運行在 64 位元的作業系統環境下,於是當下很自然的認為應該是 SQL Server 設定有啟動 AWE 才對,也因此才會在工作管理員上看起來只有吃 345MB,因為這裡並沒有包含 AWE 所使用的大小,所以看起來電腦的記憶體有一大半也許都被 SQL Server 所使用了。心裡想說這實在是個太簡單的問題,也就沒有想太多的直接回覆,但沒有多久就收到對方的回覆,表示 SQL Server 他並沒有開啟 AWE 的設定 !
看了所傳來的圖片之後,心中也很納悶,如果真的沒有開啟 AWE,怎麼可能 32 位元的 SQL Server 會只有使用 345MB 的記憶體,因此找了另外一個工具來證明電腦中的記憶體分配,此部分我採用微軟的 RAMMAP 的工具 ( http://technet.microsoft.com/en-us/sysinternals/ff700229.aspx ),這是一個非常好用的監看工具,他可以很清楚地讓你知道系統的記憶體是在 Active , StandBy , Modified 的狀態下各有多少,如果想更清楚這每個狀態的意義和每頁內所提供的資訊,也可以參考看看 Channel 9 上面有一堂專門介紹的課程 。
但對方看到這樣的訊息之後,還是覺得這個只能證明說作業系統有程式使用 AWE,但不能證明那些都是 SQL Server 所佔用的。好吧,既然要證據,那我們就從 SQL Server 的 Log 檔案和 DBCC 指令來做查看。
從 Log 檔案中我們可以找到,在最後一次 SQL Server 啟動的時候,此時是有開啟 AWE 的模式。
但接下來在後面有人設定將 AWE 的設定給關閉,但因為沒有重新啟動,因為目前還是按照開機時候的設定,是開啟 AWE 模式的狀況。
接下來透過 DBCC MEMORYSTATUS 的指令,就可以更明確看出來,作業系統中被使用到的 20GB 的 AWE,的確都被 SQL Server 拿去使用了。
透過上述的這些資料來佐證,可以清楚知道記憶體被 SQL Server 拿去使用,至於被關閉 AWE 的部分,可能是原本的管理人員認為在 64 位元環境下是不需要採用 AWE,因此才會去更改那樣的設定,但是沒有記得說更改那個設定之後,必須要將 SQL Server 重新啟動才會發生作用。而所謂 64 位元環境下不需要使用 AWE,那個主要指的是當作業系統和 SQL Server 兩者都是 64 位元的環境才不需要,但如果 SQL Server 本身是 32 位元的話,那麼如果不開啟 AWE,在 32 位元的作業系統上最多只能使用 1.7GB 的記憶體,在 64 位元的環境下可以使用到 4GB。於是把這些狀況都和管理人員說明清楚之後,總算可以結束一個問題的處理,也讓自己可以複習一下這些這些指令和工具。如果有朋友也有類似的困擾,可以參考上述的步驟來做個檢查,也可以讓自己知道到底電腦中的記憶體都被拿去做甚麼了。