SQL資料庫連線超時時間已到
問題:
1:System.InvalidOperationException: 超時時間已到。超時時間已到,但是尚未從池中獲取連線。出現這種情況可能是因為所有池連線均在使用,並且達到了最大池大小。
2:在向伺服器傳送請求時發生傳輸級錯誤。 (provider: TCP Provider, error: 0 - 由於系統緩衝區空間不足或佇列已滿,不能執行套接字上的操作。)
3:已成功與伺服器建立連線,但是在登入前的握手期間發生錯誤。 (provider: SSL Provider, error: 0 - 等待的操作過時。) ---> System.ComponentModel.Win32Exception (0x80004005): 等待的操作過時。
4:在從伺服器接收結果時發生傳輸級錯誤。 (provider: TCP Provider, error: 0 - 指定的網路名不再可用。) ---> System.ComponentModel.Win32Exception (0x80004005): 指定的網路名不再可用。
5:連線超時時間已到。在登入後階段超過了此超時時間。連線可能在等待伺服器完成登入過程並響應時超時;或者在嘗試建立多個活動連線時超時。 嘗試連線到此伺服器時花費的持續時間是 - [Pre-Login] initialization=2;handshake=5;[Login] initialization=0;authentication=0;[Post-Login] complete=14025; ---> System.ComponentModel.Win32Exception (0x80004005): 等待的操作過時。
解決方法:
設定最大超時時間
server=192.168.0.1;User ID=sa;Password=123;database=;Min Pool Size=0;Max Pool Size=30000;Pooling=true;
一般這種出現於高併發請求的情況,以下程式碼可以檢視SQL的連線數,這個可以作為監測的一種手段。
SELECT [program_name] ,[spid],* FROM [sys].[sysprocesses] WHERE [spid]>50 and [program_name]='.Net SqlClient Data Provider' and dbid= db_id('')