問題
有個系統最近不定期會發生 System.Data.SqIClient.SqlException (0x80131904) 的錯誤,已持續一個月,詳細錯誤如下,
System.Data.SqIClient.SqlException (0x80131904):建立連接至 SQL Server 時,發生網路相關或執行個體特定的錯誤。找不到或無法存取伺服器。确認執行個名稱是否正確,以及SQL Srver 是否設定為允許遠端連線。
(provider: Named Pipes Provider, error: 40 - 無法開啟至 SQL Server 的連接) –>
System.ComponentModel.Win32Exception(0x80004005):找不到網路路徑
解法
問題狀況如下,
- 錯誤不定時間發生
- 錯誤不在特定的程式
- 查看 DB 那些時間點,也沒有做什麼 備份,或是 ReBuild Index 的 Job
- DB連線字串使用的是 ip ,但錯誤卻是 Named Pipes Provider, error: 40
DB連線字串並沒有特別設定 Max Pool 的大小,所以預設是 100 個。
判斷有可能是 Pool 滿了,所以發生了錯誤。
請同事依 已超過連接逾時的設定。在取得集區連接之前超過逾時等待的時間,可能的原因為所有的共用連接已在使用中,並已達共用集區大小的最大值。 這篇查看一下目前 AP 所佔的 Pool 量是多少,
結果居然接近 100 ,所以就請同事在 DB連線字串中,加入 Max Pool Size ,並設定成 200 。
最近觀察2個星期已沒在發生以上的錯誤了。
參考資源
.NET Connection Pool 與連線相關問題整理
SqlConnection.ConnectionString Property
已超過連接逾時的設定。在取得集區連接之前超過逾時等待的時間,可能的原因為所有的共用連接已在使用中,並已達共用集區大小的最大值。