OLE DB、ODBC 和 Oracle 連接共用
當您共用連接時,您可顯著提高應用程式的效能及延展性。 本文說明 OLE DB、ODBC 和 Oracle 的 .NET Framework 資料提供者的連接共用 (Connection Pooling)。
OleDb
OLE DB 的 .NET Framework 資料提供者會自動使用 OLE DB 工作階段共用來共用連接。 連接字串引數可用於啟用或停用 OLE DB 服務 (包括共用)。 例如,下列連接字串會停用 OLE DB 工作階段共用及自動異動登記。
Provider=SQLOLEDB;OLE DB Services=-4;Data Source=localhost;Integrated Security=SSPI;
重要
Microsoft建議您使用可用的最安全驗證流程。 如果您要連接到 Azure SQL,Azure 資源受控識別是建議的驗證方法。
建議您在完成使用連接後,一定要關閉或處置該連接,以便將連接傳回集區。 未明確關閉的連接可能無法傳回集區。 例如,已離開範圍但尚未明確關閉的連接僅會在達到最大集區大小,且連接仍然有效時,才會回到連接集區。
如需 OLE DB 工作階段或資源共用,以及如何藉由覆寫 OLE DB 提供者服務預設值以停用共用的詳細資訊,請參閱 OLE DB 程式設計人員指南。
ODBC
ODBC 的 .NET Framework 資料提供者連接共用由用於連接的 ODBC 驅動程式管理員管理,並且不受 ODBC 的 .NET Framework 資料提供者的影響。
若要啟用或停用連接共用,請開啟 [控制台] 之 [系統管理工具] 資料夾中的 [ODBC 資料來源管理員]。 [連接共用] 索引標籤可讓您為每個安裝的 ODBC 驅動程式指定連接共用參數。 特定 ODBC 驅動程式的連接共用變更會影響使用該 ODBC 驅動程式的所有應用程式。
OracleClient
Oracle 的 .NET Framework 資料提供者會自動為 ADO.NET 用戶端應用程式提供連接共用。 您也可以提供數個連接字串修飾詞,以控制連接共用行為 (請參閱本文稍後的<使用連接字串關鍵字控制連接共用>)。
建立和指派集區
當開啟連接時,會依據將集區與連接中連接字串相關聯的精確比對演算法,建立連接集區。 每個連接集區與不同的連接字串相關聯。 開啟新連接時,如果連接字串與現有集區並不完全相符,則會建立新集區。
一旦建立,便無法損毀連接集區,直到作用中處理序結束為止。 維護非作用中或空的集區所耗用的系統資源極少。
加入連接
針對每個唯一連接字串可建立連接集區。 建立集區時,會建立多個連接物件並加入集區,以滿足最小集區大小需求。 視需要將連接加入集區,不超過最大集區大小。
當要求 OracleConnection 物件時,若有可用的連接,則會從集區取得該物件。 若要可用,連接目前必須為未使用,並具有相符的異動內容,或未與任何異動內容關聯,同時具有到伺服器的有效連結。
如果已達到最大集區大小,但仍沒有可用的連接,則會將要求排入佇列。 連接共用器會在連接釋放回集區後,重新配置連接以滿足這些要求。 連接關閉或處置時,會被釋放回集區。
移除連接
如果集區中的連線已閒置相當長的一段時間,或如果連接共用器偵測到與伺服器的連接已嚴重損毀,則連接共用器會從集區中移除該連接。 只有在嘗試與伺服器通訊之後,才可能偵測到上述情況。 如果發現連接已不再連接到伺服器,則會將其標記為無效。 連接共用器會定期掃描連接集區,以尋找已釋放回集區及標記為無效的物件。 然後會永久移除這些連接。
如果連接是與已消失的伺服器連接,且連接共用器尚未偵測到已嚴重損毀的連接並將其標記為無效,則會從集區中描繪連接。 此類情況發生時,會產生例外狀況。 然而,您仍需關閉連接,以將它釋放回集區。
請不要在您類別之 Close
方法中的 Dispose
、Connection
或任何其他 Managed 物件上呼叫 DataReader
或 Finalize
。 在完成項中,只需釋放類別直接擁有的 Unmanaged 資源。 如果類別未擁有任何 Unmanaged 資源,請不要在類別定義中包含 Finalize
方法。 如需詳細資訊,請參閱記憶體回收。
交易支援
從集區中描繪連接,並根據異動內容進行指派。 要求執行緒的內容必須與指派的連接相符。 因此會將每個連接集區分為無相關聯交易內容的連接,並分為均包含具有特定交易內容連接的 N 個子區塊。
連接關閉時,會根據其異動內容將其釋放回集區,並置於適當的子區塊中。 因此,即使分散式交易仍處於暫止狀態,您仍可以關閉連接,而不會產生錯誤。 這可讓您稍後認可或中止分散式異動。
使用連接字串關鍵字控制連接共用
ConnectionString 物件的 OracleConnection 屬性支援連接字串索引鍵/值配對,這些配對可用於調整連接共用邏輯的行為。
下表說明可用於調整連接共用行為的 ConnectionString 值。
名稱 | 預設 | 描述 |
---|---|---|
Connection Lifetime |
0 | 當連接傳回集區時,會將其建立時間與目前時間進行比較,如果該時間範圍 (秒) 超過 Connection Lifetime 指定的值,則會損毀連接。 這在叢集組態中很有用,可在執行中伺服器與剛連線的伺服器之間強制負載平衡。值零 (0) 將導致共用的連接具有最大逾時。 |
Enlist |
'true' | 為 true 時,如果交易內容存在,則共用器會自動在建立執行緒之目前交易內容中登記連接。 |
Max Pool Size |
100 | 集區中所允許的最大連接數。 |
Min Pool Size |
0 | 集區中保留的最小連接數。 |
Pooling |
'true' | 為 true 時,會從適當的集區描繪連接,或視需要在適當的集區中建立及加入連接。 |
另請參閱
- 連接共用
- 效能計數器
- ADO.NET 概觀 \(部分機器翻譯\)