2018年11月24日 星期六

【MS-SQL】Connection pool

Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.

Connection pool
當一個方法用完了特定的 connection 時,其實它不會立刻被回收,而是會被放進 connection pool 保存。

每個應用可以創造複數的 connection pools,取用哪個 pool 取決於 connection string 是否相同,這也是最好把 connection string 存在 config 中共用的理由之一。

Connection pool 預設最多可以有 100 條 connection 存在,若是多緒共用相同的 pool,做的很慢沒有及時關閉 connection,pool 占滿,同 connection string 的其他命令等到超時就會出現開版的錯誤。

根除這個問題應該要檢討業務邏輯的設定為什麼會造成額滿,是不是有關閉寫錯。

若真的需求特殊可以調整 connection string 的 Max pool size 和 Min pool size 應對。

Max pool size
調整 pool 最多可容納的 connection 數量,預設為 100。

Min pool size
調整 pool 初始化時先幫你建好的 connection 數量,預設為 0。

ref: 蔡老師的文章

沒有留言:

張貼留言