當調整 SQL Server 最大記憶體的上限過低,造成 SQL Server 無法順利啟動之後,該如何來進行處理呢 ?
早上原本想好好看個書,好好練習一下 MVC 的相關技術時,忽然收到一通朋友的電話,原來在他的環境中,沒有設定 SQL Server 的記憶體上限,導致部分時候造成其他在同一台主機上的程式,因為需要記憶體而導致大量的記憶體分頁的 swap,因此他想調整一下記憶體的配置,但沒有想到一時手誤,導致記憶體下限和上限都同時設定為 512MB,導致發生一些錯誤的狀況。
原本朋友覺得反正如果不夠那就在放大就好了,應該不是甚麼問題才對,但問題在於設定之後,已經無法使用 SSMS 的管理作業去設定,也無法下 SQL 指令去調整。
看一下進階的訊息,看起來似乎不妙
就算直接用 SQLCMD 也不行
因為既然無法調整,就決定先把 SQL Server 重新啟動看看是否還有機會。但重新啟動之後,發覺 SQL Server 已經無法正常啟動,因此趕快打電話來求救,否則一堆人等著連資料庫來使用。
了解問題之後,那就只好連線來看看囉。果不其然此時 SQL Server 是無法順利啟動使用的。此時可以透過 SQL Server Configuration Manager 來調整 SQL Server 啟動參數,在 Windows 2012/2012 R2 下面,可能預設沒有掛在選單上,就要自己到 C:\Windows\System32 去執行 SQLServerManager12.msc ( SQL 2014,如果是 SQL 2012 的話則是 SQLServerManager11.msc,SQL Server 2016 則是 SQLServerManager13.msc ) 。
因為懶得去開 GUI,所以我就切換到 SQL Server 的目錄下,直接執行 SQL Server 的程式 ( 因為如果電腦中有安裝多個 SQL Server,那直接打 sqlservr 的時候,可能會執行到不是真正有異常的那個 SQL Server ),並且加入 啟動參數 -f,讓 SQL Server 用最小的參數去執行 ( 可參考 MSDN ),因此會類似下面的方式去執行
可以順利啟動之後,這個時候不要急的用 SSMS 去連接,可能還是會有錯誤造成無法設定,但因為這些設定還是需要連到 SQL Server 才能設定,所以我們再開一個視窗,利用 SQLCMD 來做設定,主要是透過 sp_configure 來做設定。
EXEC sp_configure 'max server memory', 1024;
go
Reconfigure;
go
設定好之後,就可以把這個視窗,還有剛剛啟動 SQL Server 的視窗都一併關閉,接著重新啟動 SQL Server,就可以正常了。