SQL Server在記憶體過低狀況下產生的異常問題
緣由 : 日前無意間將SQL Server的Max Server Memory設為128MB。一改完設定後SQL馬上發生異常,
無法正常連上線。重啟後看似有正常啟動,但是要透過SSMS或sqlcmd連線皆無法連上Server。就算
想用DAC,也是無法連上伺服器。在此做個紀錄也分享給大家。
步驟一 : 如下圖紅色圈選處,我們故意將Max Server Memory調整為128MB。
步驟二 : 我們透過Configuration Manager重啟SQL Server,如下圖所示SQL顯示正在執行。
步驟三 : 此時我們透過SSMS去連線SQL Sever,會發現看似已正常啟動的SQL會無法提供連線,
而且錯誤訊息是千奇百怪。(如下面兩張圖)
步驟四 : 此刻到事件檢視器會看見Error訊息,很明顯地告訴我們記憶體不足。
步驟五 : 用SSMS跟sqlcmd或是DAC皆無法登入Server該怎麼辦呢? 我是使用-m的老方法來重啟
SQL Server。注意 : 我在爬文過程中,有人表示在此一狀況下用-m的方式仍無法正常讓SQL啟動,
他最後是利用-f的參數才成功啟動SQL然後改設定
步驟六 : -m重啟SQL Server後再利用sqlcmd登入Server。如下圖所示,我們可以正常登入了,此時再
利用sp_configure去將Max Server Memory的值加大。設定完成後請重啟SQL Server。
步驟七 : 如下圖所示,當我們再重啟SQL Server後。我們就可以再用SSMS登入Server了。
步驟八 : 我們回頭再去看看當我們將Max Server Memory由500MB降為128MB後,SQL的紀錄檔中可
以看見當我們完成修改後不久即產生一個Failed to allocate BUFs: FAIL_BUFFER_ALLOCATION 8的錯
誤訊息(如下圖紅色圈選處)。
結論 :
(1) 微軟建議安裝SQL Server的最小記憶體應大於512MB。
http://msdn.microsoft.com/zh-tw/library/ms143506.aspx#pmosr
(2) 當使用–m參數無法順利啟動SQL時,可以嘗試使用 –f 參數。
我是ROCK
rockchang@mails.fju.edu.tw