[.NET]Could not get ADO.NET connection. ---> System.Data.SqlClient.SqlException: Timeout expired.

最近同事詢問有一支 .NET Console 程式跑一跑後,

就會出現以下的錯誤,

Spring.Data.CannotGetAdoConnectionException: Could not get ADO.NET connection. ---> System.Data.SqlClient.SqlException: Timeout expired.

同事覺得有可能是 connection 沒有 close ,所以有在 finally 裡加入 close connection的Code。

但還是沒有用。

猜想是不是 ado.net 的 connection pooling 超過了 100 個,於是請同事加大或是停用它。

但同事說,Connnection String 已停用 Connection Pooling。

那是否是 SQL 的連線數有限制呢? 或是 Connection 時真的超過預設的 15 秒?

後來 同事說問題已解決了,

原來 是因為程式中有使用 平行處理去 處理,所以開了一堆的 Connection 。

所以同事設定 ParallelOptions ,  MaxDegreeOfParallelism 為 2 去降低 Connection 的需求。

(似乎可以再查詢為何預設的平行處理數會造成一堆 Connection 不夠的問題)。

 

所以 程式中有使用到 平行處理去 處理 DB 的話,要注意 connection 哦!

那天有類似的問題,也請 Check 程式中有沒有使用 平行處理哦!

 

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^