客戶端無法重新使用 SPID 為 2799 的會話,該會話已被重置用於連線池
報錯日誌:
message 客戶端無法重新使用 SPID 為 2799 的會話,該會話已被重置用於連線池。失敗 ID 為 46。
此錯誤可能是由於先前的操作失敗引起的。請檢視錯誤日誌,瞭解緊位於此錯誤訊息之前的失敗操作。
message
無法繼續執行,因為會話處於終止狀態。
訊息
錯誤: 18456,嚴重性: 14,狀態: 46。
訊息
Login failed for user 'wms'. 原因: 在重新驗證連線所使用的登入名時,無法開啟在登入名物件中配置的資料庫“wms”。
[客戶端: 192.168.0.52]
訊息
錯誤: 18056,嚴重性: 20,狀態: 46。
訊息
The client was unable to reuse a session with SPID 2799, which had been reset for connection pooling. The failure ID is 46. This error may have been caused by an earlier operation failing. Check the error logs for failed operations immediately before this error message.
案例說明:
當SQLSERVER的errorlog檔案中不停的報錯10856的時候,CPU同時會很低,此時SQL客戶端登陸
資料庫查詢操作正常;IIS連線數暴漲,網站無法運算元據庫(如登入、基本查詢)
分析前提:
該問題很常見,官方解釋沒有很明確的答案,都是說要麼需要打補丁要麼需要設定IIS的連線池.
這裡分析前提是資料庫已經打了最新的補丁、IIS連線資料庫的字串正常、使用者名稱和密碼正常.
分析過程:
如IIS的連線池設定1500M,IIS連線資料正常1500個,那麼每個session分到的連線池大小平均1MB,
資料庫網路資料包預設是4096;
如果這個時候有個請求需要返回20M資料,那麼這個session從資料庫返回的資料包大小就要超過session
獲得的連線池大小,資料包是4096,比正常的請求(請求1M的回話)就需要多的資料包傳遞,這個session對應的
回話保持時間就需要比平均水平長些,正常情況下,這些獨大的請求不會有太大問題.
如果同一時刻,IIS的請求數達到3000,每個SESSION分到的連線池大小平均值就會0.5MB,如果同樣返回20MB資料,
那麼SESSION的時間就會更長!
如果這個時候客戶端請求返回100個30M資料,那麼此時的請求,當資料庫返回給IIS時,IIS會發現連線池沒有足夠的記憶體空間
分配這個SESSION,此時IIS的連線池大小不會隨著客戶端請求的增加而自動增加或IIS伺服器沒有更多的實體記憶體,此時IIS就會
因為沒有足夠的連線池空間分配來快取對應的SESSION,但是後續的客戶端回話還是不停的向IIS申請,這個時候問題就來啦!
IIS會釋放掉(或IIS程式down掉或IIS自動重啟)沒法處理的SESSION,當資料庫收到IIS端SESSION請求查詢出資料準備返回給
IIS的SESSION時,去尋找對應請求的SPID,發現該請求的SPID已經不存在,但是資料庫的TCP連線不會因為SPID的不存在立即拋棄這些
資料,此時網路卡的流量會增加!同時資料庫ERRORLOG裡全是這種錯誤.
解決辦法:
0.首先排除DB是否有死鎖
1.最直接的辦法就是增加IIS連線池大小
2.就是找出程式中大的會話請求,修改程式碼
3.限制IIS程式數上限,根據日常執行情況設定連線池大小(不推薦,迫不得已)
4.資料庫端限制sql回話時常:SQL防火牆或資料庫限制長連線(不推薦,迫不得已,沒辦法的辦法)
參考:
https://blog.csdn.net/yangzhawen/article/details/8209167
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22996654/viewspace-2675509/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- iOS呼叫QQ客戶端發起臨時會話iOS客戶端會話
- mysql、redis 客戶端連線池MySqlRedis客戶端
- 會話中,如何將訪客轉化為客戶的幾種方法會話
- Java 客戶端 Jedis和JedisPool 連線池Java客戶端
- gRPC學習記錄(六)--客戶端連線池RPC客戶端
- 檢視當前pg會話連線數會話
- 融雲 IM SDK 整合 — 重新整理會話介面和會話列表介面會話
- 如何使用 byobu 複用 SSH 會話會話
- SQL Server如何判斷哪些會話/連線是長連線?SQLServer會話
- SQLAlchemy - 資料庫的連線、建立會話與模型SQL資料庫會話模型
- impala客戶端連線客戶端
- ORACLE會話連線程式三者總結Oracle會話線程
- 4.2.14.1 關於啟用客戶端快速連線故障轉移客戶端
- frp p2p rdp 計算機無法連線到遠端計算機上的另一個控制檯會話原因是你正在執行一個控制檯會話FRP計算機會話
- 為什麼sleeping的會話會造成阻塞會話
- ESP作為單連線中的TCP客戶端TCP客戶端
- 【JDBC】使用OracleDataSource建立連線池用於連線OracleJDBCOracle
- 為什麼sleeping的會話會造成阻塞(2)會話
- 某客戶系統tomcat連線池連線異常Tomcat
- 使用Spring Security控制會話Spring會話
- 使用 WebSocket 客戶端連線 MQTT 伺服器Web客戶端MQQT伺服器
- byobu複用SSH會話的技巧會話
- 成為MySQL DBA後,再看ORACLE資料庫(八、程序、連線與會話)MySqlOracle資料庫會話
- Windows10遠端桌面連線會話已結束解決方法之一Windows會話
- 基於token的會話保持機制會話
- 會話管理會話
- Redis客戶端連線數DevOpsRedis客戶端dev
- 4.2.14.3 為Oracle呼叫介面客戶端啟用快速連線故障轉移Oracle客戶端
- 記錄一次網路連線除錯問題只有tcp客戶端為什麼自己會連線上自己除錯TCP客戶端
- 4.2.14 啟用客戶端快速連線故障轉移客戶端
- 使用 Java 客戶端透過 HTTPS 連線到 EasysearchJava客戶端HTTP
- 在檢視中使用會話會話
- Cassandra的Session會話Session會話
- windows10系統下遠端桌面連線失敗客戶端無法建立與遠端計算機的連線如何解決Windows客戶端計算機
- openssl客戶端程式設計:一個不起眼的函式導致的SSL會話失敗問題客戶端程式設計函式會話
- Linux終端會話實時共享(kibitz)Linux會話
- php中關於會話機制的理解PHP會話
- GreatSQL 在SQL中使用 HINT 語法修改會話變數SQL會話變數