超時時間已到。超時時間已到,但是尚未從池中獲取連接。出現這種情況可能是因爲所有池連接均在使用,並且達到了最大池大小。

嗯~今天在測試153上發佈的訂餐系統穩定性的時候出現了“超時時間已到。超時時間已到,但是尚未從池中獲取連接。出現這種情況可能是因爲所有池連接均在使用,並且達到了最大池大小。”問題。


問題分析:

我們獲取連接超過連接池最大值時產生如上異常。通常連接池最大值爲100。當我們獲取連接超過最大值時,ADO.NET等待連接池返回連接而超時,這樣將拋出如上異常


解決方法:

1、首先確定你的數據庫是否已經開放,是否開放端口,允許讓其他機器訪問,具體如下:

https://jingyan.baidu.com/article/dca1fa6fa5fc07f1a540527a.html 

在上方連接中應該注意的是:最好將TCP的端口都設置成1433,僅僅設置TCP All可能沒有效果。

2、如果數據庫已經設置好之後,還是不能夠連接到,就要做如下操作

其餘的就點擊下一步,最後選擇名稱(此處爲“SQL”),最後點擊完成即可。

同樣的道理去添加出站規則。

3、如果還是不可以,就需要進行如下操作:

在數據庫連接加 "Max Pool Size = 512;server=192.168.22.153;uid=sa;pwd=;database=OrderSystemTest;"

DataReader是獨佔連接的,就是說你的程序可能設計上有問題。比如說最大連接設100,假設有100個人同時使用 DataReader正在讀取數據庫內容,那麼當第101人讀取的時候,連接池中的連接已經沒有了,就會出現上面的錯誤。DataReader是獨佔連接 的,每個DataReader都要佔用一個連接。當然這個情況是偶爾出現的,所以會很長時間出現一次,因爲只有同時有超過連接池最大連接數量的併發操作纔會發生。而且你加大併發數量只能暫時緩解問題,如果你加大到200個併發連接,如果有201 人同時操作怎麼辦?你說了你使用Connection對象的Close()方法,這是不行的,因爲Close()方法僅僅是關閉連接,但這個連接沒有釋放,還是被這個對象佔用,要釋放必須使用Connection的Dispose()方法顯式釋放連接纔可以,否則這個對象佔用的連接只能等到垃圾收集的情 況下才能被釋放。這種情況肯定會出現“超時時間已到”的錯誤。


總結:

多收穫,不懂就查,查不到就問。感謝...

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章