時間:2016-08-17 23:22:47 來源:IT貓撲網(wǎng)原創(chuàng) 作者:IT貓撲網(wǎng) 我要評論(0)
建立池連接可以顯著提高應用程序的性能和可縮放性。SQL Server .NET Framework 數(shù)據(jù)提供程序自動為 ADO.NET 客戶端應用程序提供連接池。您也可以提供幾個連接字符串修飾符來控制連接池行為,請參見本主題內(nèi)下文中"使用連接字符串關鍵字控制連接池"這一節(jié)。
池的創(chuàng)建和分配
當連接打開時,將根據(jù)一種精確的匹配算法來創(chuàng)建連接池,該算法會使連接池與連接中的字符串相關聯(lián)。每個連接池都與一個不同的連接字符串相關聯(lián)。當新連接打開時,如果連接字符串不精確匹配現(xiàn)有池,則將創(chuàng)建一個新池。
在以下示例中,將創(chuàng)建三個新的 SqlConnection 對象,但只需要使用兩個連接池來管理這些對象。請注意,第一個和第二個連接字符串的差異在于為 Initial Catalog 分配的值。
SqlConnection conn = new SqlConnection(); conn.ConnectionString = "Integrated Security=SSPI;Initial Catalog=northwind"; conn.Open(); // Pool A is created. SqlConnection conn = new SqlConnection(); conn.ConnectionString = "Integrated Security=SSPI;Initial Catalog=pubs"; conn.Open(); // Pool B is created because the connection strings differ. SqlConnection conn = new SqlConnection(); conn.ConnectionString = "Integrated Security=SSPI;Initial Catalog=northwind"; conn.Open(); // The connection string matches pool A.
連接池一旦創(chuàng)建,直到活動進程終止時才會被毀壞。非活動或空池的維護只需要最少的系統(tǒng)開銷。
連接的添加
連接池是為每個唯一的連接字符串創(chuàng)建的。當創(chuàng)建一個池后,將創(chuàng)建多個連接對象并將其添加到該池中,以滿足最小池大小的要求。連接將根據(jù)需要添加到池中,直至達到最大池大小。
當請求 SqlConnection 對象時,如果存在可用的連接,則將從池中獲取該對象。若要成為可用連接,該連接當前必須未被使用,具有匹配的事務上下文或者不與任何事務上下文相關聯(lián),并且具有與服務器的有效鏈接。
如果已達到最大池大小且不存在可用的連接,則該請求將會排隊。當連接被釋放回池中時,連接池管理程序通過重新分配連接來滿足這些請求。對 Connection 調(diào)用 Close 或 Dispose 時,連接被釋放回池中。
警告 建議使用完 Connection 后始終將其關閉,以便連接可以返回到池中。這可以使用 Connection 對象的 Close 或 Dispose 方法來實現(xiàn)。不是顯式關閉的連接可能不會添加或返回到池中。例如,如果連接已超出范圍但沒有顯式關閉,則僅當達到最大池大小而該連接仍然有效時,該連接才會返回到連接池中。
注意 不要在類的 Finalize 方法中對 Connection、DataReader 或任何其他托管對象調(diào)用 Close 或 Dispose。在終結器中,僅釋放類直接擁有的非托管資源。如果類不擁有任何非托管資源,則不要在類定義中包含 Finalize 方法。有關更多信息,請參見垃圾回收編程。
連接的移除
如果連接生存期已過期,或者連接池管理程序檢測到與服務器的連接已斷開,連接池管理程序?qū)某刂幸瞥撨B接。請注意,只有在嘗試與服務器進行通信后,才可以檢測到這種情況。如果發(fā)現(xiàn)某連接不再連接到服務器,則會將其標記為無效。連接池管理程序會定期掃描連接池,查找已釋放到池中并標記為無效的對象。找到后,這些連接將被永久移除。
如果存在與已消失的服務器的連接,那么即使連接池管理程序未檢測到已斷開的連接并將其標記為無效,仍有可能將此連接從池中取出。當發(fā)生這種情況時,將生成異常。但是,為了將該連接釋放回池中,仍必須將其關閉。
事務支持
連接是根據(jù)事務上下文來從池中取出并進行分配的。請求線程和所分配的連接的上下文必須匹配。因此,每個連接池實際上又分為不具有關聯(lián)事務上下文的連接以及 N 個各自包含與一個特定事務上下文的連接的子部分。
當連接關閉時,它將被釋放回池中,并根據(jù)其事務上下文放入相應的子部分。因此,即使分布式事務仍然掛起,仍可以關閉該連接而不會生成錯誤。這樣,您就可以在隨后提交或中止分布式事務。
使用連接字符串關鍵字控制連接池
SqlConnection 對象的 ConnectionString 屬性支持連接字符串鍵/值對,這些鍵/值對可用于調(diào)整連接池邏輯的行為。
下表描述了可用于調(diào)整連接池行為的 ConnectionString 值。
名稱 | 默認值? | 說明 |
Connection Lifetime | 0 | 當連接返回到池中時,將對它的創(chuàng)建時間和當前時間??? 進行比較,如果時間間隔超過由 Connection Lifetime 指定的值(以秒為單位),則會毀壞該連接。在聚集配置中可以使用它來強制在運行服務器和剛聯(lián)機的服務器之間達到負載平衡。 |
Connection Reset |
關鍵詞標簽:SQL Server,asp.net
相關閱讀 影響SQL server性能的關鍵 抖音賣貨怎么開通-抖音賣貨開通方法說明 SQL Server 2000安裝和基本框架 SQL Server 連接基礎知識 優(yōu)化SQL Server數(shù)據(jù)庫服務器的內(nèi)存配置 SQL Server連接中的四個最常見錯誤
熱門文章 淺談JSP JDBC來連接SQL Server 2005的方法 SqlServer2005對現(xiàn)有數(shù)據(jù)進行分區(qū)具體步驟 sql server系統(tǒng)表損壞的解決方法 MS-SQL2005服務器登錄名、角色、數(shù)據(jù)庫用戶、角色、架構的關系
時間:2024-08-03 22:52:21
時間:2024-08-01 13:57:48
時間:2022-07-15 11:43:42
時間:2020-08-10 16:59:40
時間:2019-05-22 15:16:22
時間:2019-05-20 17:35:48
人氣排行 配置和注冊ODBC數(shù)據(jù)源-odbc數(shù)據(jù)源配置教程 如何遠程備份(還原)SQL2000數(shù)據(jù)庫 SQL2000數(shù)據(jù)庫遠程導入(導出)數(shù)據(jù) SQL2000和SQL2005數(shù)據(jù)庫服務端口查看或修改 修改Sql Server唯一約束教程 SQL Server 2005降級到2000的正確操作步驟 sql server系統(tǒng)表損壞的解決方法 淺談JSP JDBC來連接SQL Server 2005的方法