[SQL Server][Emergency]SQL Max Memory Limit Too Low

由於SQL Server最大的記憶體限制預設是2,147,483,647 MB(超大的!而且很眼熟,整數int的最大值),再加上傳說中SQL Server是愛吃記憶體的怪獸,為了避免她不小心把作業系統的記憶體都吃的很乾淨,甚至還使用到虛擬記憶體(可以設定Lock Pages in Memory避免),在安裝完SQL Server後,我們會配置適合比例的記憶體給指定的Instance。因為想測試SQL 記憶體不足對交易效能的影響,不小心把記憶體設定成很小的375 MB,這下悲劇了。


SQL記憶體不足錯誤 

SQL Server首先出現了SQL 701的錯誤:

訊息 701,層級 17,狀態 130,行 1

資源集區 'default' 中的系統記憶體不足,無法執行此查詢。

 

想要改回來,也沒得改,欲哭無淚!

-- Turn on advanced options
EXEC  sp_configure'Show Advanced Options',1;
GO
RECONFIGURE;
GO

-- Set max server memory
EXEC  sp_configure'max server memory (MB)',6400;
GO
RECONFIGURE;
GO

.Net SqlClient Data Provider: 訊息 701,層級 17,狀態 130,行 1

資源集區 'default' 中的系統記憶體不足,無法執行此查詢。

 

這時不用緊張,也不用重新安裝SQL Server,想起Super SQL Server楊老師才在幾週前有分享【管理 Life Saver 】之 【調整記憶體時候看錯MB為GB 導致無法啟動SQL Server】,就像茫茫大海迷失方向找到明燈:

啟動SQL Server於-f -m模式

 


1.停止SQL Server服務以及TCP/IP網路連線

打開SQL Server Configuration Manager熱鍵: Windows 鍵 + R + sqlservermanager12.msc

後面12是版本號,如果是SQL  Server 2012則為11,SQL Server 2016則是13

 

停止對應的DataBase Engine,案例中的Instance是叫SQL12。

 

關閉TCP/IP通訊協定,暫時限制只有本機連線(Shared Memory)登入。

 


2.以最小資源啟動SQL Server並且修改記憶體組態

以系統管理員身分打開第一個命令提示字元:

 

切到SQL Server \Binn目錄

cd E:\SQL2014\MSSQL12.SQL12\MSSQL\Binn

視安裝時選擇的目錄。

 

以最小組態並以單一使用者啟動SQL Server,指定SQL12的Instance,限定使用SQLCMD程式連接。

sqlservr -f -m"SQLCMD" -s SQL12
  • Starts an instance of SQL Server with minimal configuration –f
  • Limits the connections to a specified client application -mSQLCMD
  • named instance of SQL Server -s "SQL12"

 

OK! SQL Server啟動了,我們先不要關閉這個視窗,現在SQL Server目前可是透過她執行的。

 

打開第二個命令提示字元

以sqlcmd登入指定的Named Instance

Sqlcmd -S .\SQL12

(注意,-S的S是大寫)

 

先確認Instance Name是否正確,有的時候打錯,她就登入到Default Instance

執行以下T-SQL命令修改最大記憶體使用組態

-- Turn on advanced options
EXEC  sp_configure'Show Advanced Options',1;
GO
RECONFIGURE;
GO

-- Set max server memory
EXEC  sp_configure'max server memory (MB)',6400;
GO
RECONFIGURE;
GO

 

設定完成後,將兩個命令提示字元都關閉。

 


3.重新啟動SQL Server

從SQL Server組態管理員啟動DataBase Engine服務

打開TCP/IP網路

有神的方向指引,犯錯得到救贖!

下次再犯,我要把甜不辣手剁了。

 

 


參考

SQL Max Memory Limit Too Low

Database Engine Service Startup Options

[SQL][問題處理]調整 SQL Server 記憶體上限後導致 SQL Server 無法啟用

Super SQL Server

Enable the Lock Pages in Memory Option (Windows)