最近同事詢問有一支 .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:從零開始的軟體開發生活」
請大家繼續支持 ^_^