瞭解連接池

瞭解連接池

.NET Framework 2.0

池連接可以顯著提高應用程序的性能和可縮放性。.NET Framework 數據提供程序處理連接池的方式有所不同。有關 SQL Server 的連接池的信息,請參閱 使用連接池

OLE DB .NET Framework 數據提供程序連接池

OLE DB .NET Framework 數據提供程序使用 OLE DB 會話池自動管理連接池。連接字符串參數可用於啓用或禁用包括池在內的 OLE DB 服務。例如,以下連接字符串禁用 OLE DB 會話池和自動事務登記。

Provider=SQLOLEDB;OLE DB Services=-4;Data Source=localhost;Integrated Security=SSPI;

我們建議在使用完連接時一定要關閉或斷開連接,以便連接可以返回池。不是顯式關閉的連接可能無法返回池。例如,如果連接已超出範圍但沒有顯式關閉,則僅當達到最大池大小而該連接仍然有效時,該連接纔會返回到連接池中。

有關 OLE DB 會話池或資源池以及如何通過重寫 OLE DB 提供程序服務默認值禁用池的更多信息,請參見 MSDN 庫中的 OLE DB Programmer's Reference

ODBC .NET Framework 數據提供程序的連接池

ODBC .NET Framework 數據提供程序的連接池由用於該連接的 ODBC 驅動程序管理器管理,不受 ODBC .NET Framework 數據提供程序的影響。

要啓用或禁用連接池,在“控制面板”的“管理工具”文件夾中打開“ODBC 數據源管理器”。通過“連接池”選項卡可以爲每個已安裝的 ODBC 驅動程序指定連接池參數。請注意,對特定 ODBC 驅動程序所做的更改會影響所有使用該 ODBC 驅動程序的應用程序。

有關 ODBC 連接池的更多信息,請參見 MSDN 庫中的 OLE DB Programmer's Reference

Oracle .NET Framework 數據提供程序連接池

Oracle .NET Framework 數據提供程序自動爲 ADO.NET 客戶端應用程序提供連接池。您也可以提供幾個連接字符串修飾符,用於控制連接池的行爲(請參見本主題後文的“使用連接字符串關鍵字控制連接池”)。

池的創建和分配

當連接打開時,將根據一種精確的匹配算法來創建連接池,該算法會使連接池與連接中的字符串相關聯。每個連接池都與一個不同的連接字符串相關聯。當新連接打開時,如果連接字符串不精確匹配現有池,則將創建一個新池。

連接池一旦創建,直到活動進程終止時纔會被毀壞。維護不活動的池或空池佔用的系統資源非常少。

連接的添加

連接池是爲每個唯一的連接字符串創建的。當創建一個池後,將創建多個連接對象並將其添加到該池中,以滿足最小池大小的要求。連接將根據需要添加到池中,直至達到最大池大小。

在請求 OracleConnection 對象時,如果存在可用的連接,則將從池中獲取該對象。要成爲可用連接,該連接當前必須未被使用,具有匹配的事務上下文或者不與任何事務上下文相關聯,並且具有與服務器的有效鏈接。

如果已達到最大池大小且不存在可用的連接,則該請求將會排隊。當連接被釋放回池中時,連接池管理程序通過重新分配連接來滿足這些請求。連接在關閉或斷開時釋放回池中。

連接的移除

如果連接長時間空閒,或池進程檢測到與服務器的連接已斷開,連接池進程會將該連接從池中移除。請注意,只有在嘗試與服務器進行通信後,纔可以檢測到這種情況。如果發現某連接不再連接到服務器,則會將其標記爲無效。連接池管理程序會定期掃描連接池,查找已釋放到池中並標記爲無效的對象。找到後,這些連接將被永久移除。

如果存在一個與已消失的服務器的連接,如果連接池進程尚未檢測到斷開的連接並將連接標記爲無效,可以從池中提取此連接。當發生這種情況時,將生成異常。但是,爲了將該連接釋放回池中,仍必須將其關閉。

不要在類的 Finalize 方法中對 Connection、DataReader 或任何其他託管對象調用 Close 或 Dispose。在終結器中,僅釋放類直接擁有的非託管資源。如果類不擁有任何非託管資源,則不要在類定義中包含 Finalize 方法。有關更多信息,請參見垃圾回收

事務支持

連接是根據事務上下文來從池中取出並進行分配的。請求線程和所分配的連接的上下文必須匹配。因此,每個連接池實際上又分爲不具有關聯事務上下文的連接以及 N 個各自包含與一個特定事務上下文的連接的子部分。

當連接關閉時,它將被釋放回池中,並根據其事務上下文放入相應的子部分。因此,即使分佈式事務仍然掛起,仍可以關閉該連接而不會生成錯誤。這樣,您就可以在隨後提交或中止分佈式事務。

使用連接字符串關鍵字控制連接池

OracleConnection 對象的 ConnectionString 屬性支持連接字符串鍵/值對,可以用於調整連接池邏輯的行爲。

下表描述了可用於調整連接池行爲的 ConnectionString 值。

名稱 默認值 說明

Connection Lifetime

0

連接返回到池中後,創建時間將與當前時間進行比較,如果時間跨度(秒)超過 Connection Lifetime 指定的值,該連接將被破壞。在聚集配置中可以使用它來強制在運行服務器和剛聯機的服務器之間達到負載平衡。

如果值爲零 (0),則將使池連接具有最大的超時期限。

Enlist

'true'

當爲 true 時,如果存在事務上下文,池管理程序將自動在創建線程的當前事務上下文中登記連接。

Max Pool Size

100

池中允許的最大連接數。

Min Pool Size

0

池中維護的最小連接數。

Pooling

'true'

當爲 true 時,將從相應的池中取出連接,或者在必要時創建連接並將其添加到相應的池中。

請參見

概念

使用連接池

其他資源

連接到數據源
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章