IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類(lèi)|軟件專(zhuān)題|手機(jī)版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當(dāng)前所在位置: 首頁(yè)數(shù)據(jù)庫(kù)MSSQL → SQL Server asp.net 數(shù)據(jù)提供程序連接池

SQL Server asp.net 數(shù)據(jù)提供程序連接池

時(shí)間:2016-08-17 23:22:47 來(lái)源:IT貓撲網(wǎng)原創(chuàng) 作者:IT貓撲網(wǎng) 我要評(píng)論(0)

建立池連接可以顯著提高應(yīng)用程序的性能和可縮放性。SQL Server .NET Framework 數(shù)據(jù)提供程序自動(dòng)為 ADO.NET 客戶端應(yīng)用程序提供連接池。您也可以提供幾個(gè)連接字符串修飾符來(lái)控制連接池行為,請(qǐng)參見(jiàn)本主題內(nèi)下文中"使用連接字符串關(guān)鍵字控制連接池"這一節(jié)。

池的創(chuàng)建和分配

當(dāng)連接打開(kāi)時(shí),將根據(jù)一種精確的匹配算法來(lái)創(chuàng)建連接池,該算法會(huì)使連接池與連接中的字符串相關(guān)聯(lián)。每個(gè)連接池都與一個(gè)不同的連接字符串相關(guān)聯(lián)。當(dāng)新連接打開(kāi)時(shí),如果連接字符串不精確匹配現(xiàn)有池,則將創(chuàng)建一個(gè)新池。

在以下示例中,將創(chuàng)建三個(gè)新的 SqlConnection 對(duì)象,但只需要使用兩個(gè)連接池來(lái)管理這些對(duì)象。請(qǐng)注意,第一個(gè)和第二個(gè)連接字符串的差異在于為 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)建,直到活動(dòng)進(jìn)程終止時(shí)才會(huì)被毀壞。非活動(dòng)或空池的維護(hù)只需要最少的系統(tǒng)開(kāi)銷(xiāo)。

連接的添加

連接池是為每個(gè)唯一的連接字符串創(chuàng)建的。當(dāng)創(chuàng)建一個(gè)池后,將創(chuàng)建多個(gè)連接對(duì)象并將其添加到該池中,以滿足最小池大小的要求。連接將根據(jù)需要添加到池中,直至達(dá)到最大池大小。

當(dāng)請(qǐng)求 SqlConnection 對(duì)象時(shí),如果存在可用的連接,則將從池中獲取該對(duì)象。若要成為可用連接,該連接當(dāng)前必須未被使用,具有匹配的事務(wù)上下文或者不與任何事務(wù)上下文相關(guān)聯(lián),并且具有與服務(wù)器的有效鏈接。

如果已達(dá)到最大池大小且不存在可用的連接,則該請(qǐng)求將會(huì)排隊(duì)。當(dāng)連接被釋放回池中時(shí),連接池管理程序通過(guò)重新分配連接來(lái)滿足這些請(qǐng)求。對(duì) Connection 調(diào)用 Close 或 Dispose 時(shí),連接被釋放回池中。

警告 建議使用完 Connection 后始終將其關(guān)閉,以便連接可以返回到池中。這可以使用 Connection 對(duì)象的 Close 或 Dispose 方法來(lái)實(shí)現(xiàn)。不是顯式關(guān)閉的連接可能不會(huì)添加或返回到池中。例如,如果連接已超出范圍但沒(méi)有顯式關(guān)閉,則僅當(dāng)達(dá)到最大池大小而該連接仍然有效時(shí),該連接才會(huì)返回到連接池中。

注意 不要在類(lèi)的 Finalize 方法中對(duì) Connection、DataReader 或任何其他托管對(duì)象調(diào)用 Close 或 Dispose。在終結(jié)器中,僅釋放類(lèi)直接擁有的非托管資源。如果類(lèi)不擁有任何非托管資源,則不要在類(lèi)定義中包含 Finalize 方法。有關(guān)更多信息,請(qǐng)參見(jiàn)垃圾回收編程。

連接的移除

如果連接生存期已過(guò)期,或者連接池管理程序檢測(cè)到與服務(wù)器的連接已斷開(kāi),連接池管理程序?qū)某刂幸瞥撨B接。請(qǐng)注意,只有在嘗試與服務(wù)器進(jìn)行通信后,才可以檢測(cè)到這種情況。如果發(fā)現(xiàn)某連接不再連接到服務(wù)器,則會(huì)將其標(biāo)記為無(wú)效。連接池管理程序會(huì)定期掃描連接池,查找已釋放到池中并標(biāo)記為無(wú)效的對(duì)象。找到后,這些連接將被永久移除。

如果存在與已消失的服務(wù)器的連接,那么即使連接池管理程序未檢測(cè)到已斷開(kāi)的連接并將其標(biāo)記為無(wú)效,仍有可能將此連接從池中取出。當(dāng)發(fā)生這種情況時(shí),將生成異常。但是,為了將該連接釋放回池中,仍必須將其關(guān)閉。

事務(wù)支持

連接是根據(jù)事務(wù)上下文來(lái)從池中取出并進(jìn)行分配的。請(qǐng)求線程和所分配的連接的上下文必須匹配。因此,每個(gè)連接池實(shí)際上又分為不具有關(guān)聯(lián)事務(wù)上下文的連接以及 N 個(gè)各自包含與一個(gè)特定事務(wù)上下文的連接的子部分。

當(dāng)連接關(guān)閉時(shí),它將被釋放回池中,并根據(jù)其事務(wù)上下文放入相應(yīng)的子部分。因此,即使分布式事務(wù)仍然掛起,仍可以關(guān)閉該連接而不會(huì)生成錯(cuò)誤。這樣,您就可以在隨后提交或中止分布式事務(wù)。

使用連接字符串關(guān)鍵字控制連接池

SqlConnection 對(duì)象的 ConnectionString 屬性支持連接字符串鍵/值對(duì),這些鍵/值對(duì)可用于調(diào)整連接池邏輯的行為。

下表描述了可用于調(diào)整連接池行為的 ConnectionString 值。

名稱(chēng)

默認(rèn)值?

說(shuō)明

Connection Lifetime

0

當(dāng)連接返回到池中時(shí),將對(duì)它的創(chuàng)建時(shí)間和當(dāng)前時(shí)間??? 進(jìn)行比較,如果時(shí)間間隔超過(guò)由 Connection Lifetime 指定的值(以秒為單位),則會(huì)毀壞該連接。在聚集配置中可以使用它來(lái)強(qiáng)制在運(yùn)行服務(wù)器和剛聯(lián)機(jī)的服務(wù)器之間達(dá)到負(fù)載平衡。
如果值為零 (0),則將使池連接具有最大的超時(shí)期限。

Connection Reset




關(guān)鍵詞標(biāo)簽:SQL Server,asp.net

相關(guān)閱讀 影響SQL server性能的關(guān)鍵 抖音賣(mài)貨怎么開(kāi)通-抖音賣(mài)貨開(kāi)通方法說(shuō)明 SQL Server 2000安裝和基本框架 SQL Server 連接基礎(chǔ)知識(shí) 優(yōu)化SQL Server數(shù)據(jù)庫(kù)服務(wù)器的內(nèi)存配置 SQL Server連接中的四個(gè)最常見(jiàn)錯(cuò)誤

文章評(píng)論
發(fā)表評(píng)論

熱門(mén)文章 淺談JSP JDBC來(lái)連接SQL Server 2005的方法 淺談JSP JDBC來(lái)連接SQL Server 2005的方法 SqlServer2005對(duì)現(xiàn)有數(shù)據(jù)進(jìn)行分區(qū)具體步驟 SqlServer2005對(duì)現(xiàn)有數(shù)據(jù)進(jìn)行分區(qū)具體步驟 sql server系統(tǒng)表?yè)p壞的解決方法 sql server系統(tǒng)表?yè)p壞的解決方法 MS-SQL2005服務(wù)器登錄名、角色、數(shù)據(jù)庫(kù)用戶、角色、架構(gòu)的關(guān)系 MS-SQL2005服務(wù)器登錄名、角色、數(shù)據(jù)庫(kù)用戶、角色、架構(gòu)的關(guān)系

相關(guān)下載

人氣排行 配置和注冊(cè)O(shè)DBC數(shù)據(jù)源-odbc數(shù)據(jù)源配置教程 如何遠(yuǎn)程備份(還原)SQL2000數(shù)據(jù)庫(kù) SQL2000數(shù)據(jù)庫(kù)遠(yuǎn)程導(dǎo)入(導(dǎo)出)數(shù)據(jù) SQL2000和SQL2005數(shù)據(jù)庫(kù)服務(wù)端口查看或修改 修改Sql Server唯一約束教程 SQL Server 2005降級(jí)到2000的正確操作步驟 sql server系統(tǒng)表?yè)p壞的解決方法 淺談JSP JDBC來(lái)連接SQL Server 2005的方法