2011年12月21日 星期三

MSSQL 2005 jdbc.SQLServerException

發生情形:
程式持續開啟與關閉大量連線至MSQQL DB時,短時間內程式可以順利執行,但過一段時間後,程式會一直跑出SQLServerException,資料也無法寫入DB
  
錯誤訊息:
INFO   | jvm 1    | 2011/12/16 16:09:49 | com.microsoft.sqlserver.jdbc.SQLServerException: 連接到主機 localhost 的 TCP/IP 連接已經失敗。錯誤: "Address already in use: connect。請確認連接屬性並檢查 SQL Server 的執行個體是否正在主機上執行,而且通訊埠可接收 TCP/IP 連接,同時防火牆也未封鎖連到通訊埠的 TCP 連接。"。
 INFO   | jvm 1    | 2011/12/16 16:09:49 |     at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:171)
INFO   | jvm 1    | 2011/12/16 16:09:49 |     at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1033)
INFO   | jvm 1    | 2011/12/16 16:09:49 |     at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:817)
INFO   | jvm 1    | 2011/12/16 16:09:49 |     at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:700)
INFO   | jvm 1    | 2011/12/16 16:09:49 |     at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:842)
INFO   | jvm 1    | 2011/12/16 16:09:49 |     at java.sql.DriverManager.getConnection(DriverManager.java:582)
INFO   | jvm 1    | 2011/12/16 16:09:49 |     at java.sql.DriverManager.getConnection(DriverManager.java:207)

排除方式
*修改MS SQL DB主機TcpTimedWaitDelay參數值
TcpTimedWaitDelay 值決定必須經過多久之後,TCP/IP 才能釋出已關閉的連線,以及重複使用它的資源。 此關閉和釋出的間隔稱為 TIME_WAIT 狀態,或是區段生命期限上限 (2MSL) 狀態的兩倍。 在這段時間內,通往用戶端和伺服器的連線重新開啟的成本,比建立新的連線低。 縮減這個項目的值時,TCP/IP 可以更快釋出已關閉的連線,以提供更多資源給新的連線。 如果執行中的應用程式需要快速釋出、建立新連線,或多個連線在 TIME_WAIT 狀態中造成通訊量太低,因而需要進行調整的話,請調整這個參數。
預設值是 0xF0,這會將等待時間設為 240 秒(4 分鐘)。
最小的建議值是 0x1E,將等待時間設為 30 秒。請利用這個程序來檢視或自訂您的值。
  1. 啟動 regedit 指令,導覽至 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parametersregistry 子鍵,然後建立一個新的 REG_DWORD 值,稱為 TcpTimedWaitDelay
  2. 請將這個值設為十進位的 30,也就是 Hex0x0000001e。這個值將等待時間設為 30 秒。
  3. 關閉登錄編輯器。
  4. 停止並重新啟動系統。


Data type Range Default value
REG_DWORD          0x1E 0x12C ( 30–300 seconds )      0xF0 ( 240 seconds = 4 minutes )


MS SQL參考網站:http://technet.microsoft.com/en-us/library/cc938217.aspx

沒有留言: