首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

ADO.NET SQL Server 連接池機制深度解析與調優參數完整對照表

     編輯:關於SqlServer

連接池建立與分配邏輯

  • 依 精確比對連接字串 建立獨立池
  • 相同字串復用池,不同字串(如 Initial Catalog 不同)建立新池
  • 池建立後存活至進程結束,空閒池維護成本極低

連接加入與取得

  • 池啟動時預建連接至 Min Pool Size
  • 依需求擴展至 Max Pool Size(預設 100)
  • 請求連接時:優先取得可用、無交易上下文或上下文匹配、連線有效的連接
  • 達上限且無可用連接 → 請求排隊,釋放時重新分配

關鍵:正確釋放連接

必須顯式呼叫 Close() 或 Dispose(),否則連接不會立即回池。
錯誤示範:在 Finalize 解構子中關閉連接 → 違反 GC 規範,僅釋放非受控資源。

連接移除機制

  • 連接存活期超過 Connection Lifetime → 回池時銷毀
  • 偵測到伺服器連線中斷 → 標記無效,定期掃描永久移除
  • 若取得已失效連接 → 拋出例外,仍需 Close() 歸還池

交易支援

池內依交易上下文劃分子區:無交易區 + N 個特定交易區。關閉連接時依上下文歸入對應子區,分散式交易掛起期間仍可關閉連接。

連接字串控制參數對照表

參數預設值說明
Connection Lifetime0秒數;回池時若建立時間超過此值則銷毀。0 表示無限壽命。可用於叢集負載平衡。
Connection Resettrue從池取出時是否重置連接狀態。SQL 7.0 設 false 可省一次往返,但不重置資料庫上下文等狀態。
Enlisttrue自動將連接登記至目前執行緒的交易上下文。
Max Pool Size100池中最大連接數。
Min Pool Size0池中維持的最小連接數。
Poolingtrue啟用/停用連接池。

效能計數器(效能監視器 → .Net CLR Data)

計數器說明
Current # pooled and non pooled connections目前池連接與非池連接總數
Current # pooled connections目前進程所有池的連接數
Current # connection pools目前進程的池數量
Peak # pooled connections進程啟動以來池連接峰值(需特定進程實例)
Total # failed connects開啟連接失敗總次數

注意: ASP.NET 應用僅能看到 _Global 實例,數值為所有應用程式總和。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved