錯誤訊息:
The client was unable to reuse a session with SPID xxx, which had been reset for connection pooling. The failure ID is 1. This error may have been caused by an earlier operation failing.
現象:ERRORLOG 大量刷 18056 錯誤、CPU 使用率異常偏低、IIS 連線數暴增、網站無法操作資料庫(登入、查詢皆失敗),但 SSMS 直連資料庫卻正常。
ERRORLOG 狂噴 18056。| 優先級 | 方案 | 適用情境 | 風險/成本 |
|---|---|---|---|
| 0 | 排除資料庫死鎖 | 先確認非封鎖/死鎖導致查詢卡住 | 無風險,必做 |
| 1 | 增加 IIS 連接池記憶體上限 | 最直接、見效最快 | 需機器有足夠實體 RAM |
| 2 | 找出並優化大資料回傳查詢(分頁、只取必要欄位、非同步流式處理) | 治本,減少單一 Session 記憶體佔用 | 需開發配合,週期較長 |
| 3 | 限制 IIS 工作進程數上限,依實際負載調整連接池大小 | 迫不得已的折衷 | 可能降低並發承載能力 |
| 4 | 資料庫端限制長連線/查詢逾時(SQL 防火牆、Resource Governor) | 最後防線 | 可能誤傷正常長查詢 |
Pooling=true; Max Pool Size=... 設定合理。sys.dm_exec_sessions、sys.dm_exec_requests 觀察大資料查詢模式。sp_WhoIsActive 或 Extended Events 長期捕捉等待類型(ASYNC_NETWORK_IO 通常伴隨)。18056 本質是 應用層(IIS)連接池記憶體瓶頸倒逼資料庫層 Session 異常終止。治標擴大連接池,治本優化大資料查詢與架構(如引入快取、分頁、非同步串流),並建立完善的容量規劃與監控機制。