連接池是客戶端進程內的機制,由數據庫驅動程序 (MDAC / SQL Server Native Client / JDBC) 管理的線程池實現,非服務端、非 Windows 系統線程池。
| 驅動程序 | 適用技術棧 | 連接池隔離 |
|---|---|---|
| MDAC (Microsoft Data Access Components) | 經典 ADO、VB6、ASP | 進程級隔離 |
| SQL Server Native Client (SNAC) | ADO.NET (SqlClient)、ODBC、OLE DB | 進程級隔離 |
| Microsoft JDBC Driver | Java / JDBC | JVM 級隔離 |
關鍵:不同驅動的連接池完全隔離,JDBC 池僅供 Java 程序使用,SNAC 池僅供 ADO/ADO.NET 使用。
Open():從池取閒置連接 → 若無閒置且未達上限 → 建立物理連接 → 若達上限 → 排隊等待 (Connection Timeout)Close()/Dispose():歸還池中標記為閒置,**不斷開物理連接**| 參數 | 默認值 | 建議 |
|---|---|---|
| Max Pool Size | 100 | 高併發適當調大 (如 200-500),避免無限制耗盡服務端連接 |
| Min Pool Size | 0 | 預熱場景設 >0,減少首次連接延遲 |
| Connection Lifetime | 0 (不檢查) | 長運行應用設 300-600 秒,強制定期換新連接 |
| Pooling | true | 極少數場景 (如單次執行工具) 設 false |

圖示:同一驅動下,AppA 與 AppB 因 Application Name 不同,各自維護獨立連接池,物理連接不共享。
sp_who2 觀察睡眠連接 (AWAITING COMMAND) → 可能是連接池閒置連接