濮阳杆衣贸易有限公司

主頁 > 知識庫 > .NET Framework SQL Server 數(shù)據(jù)提供程序連接池

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

熱門標(biāo)簽:知名電銷機(jī)器人價(jià)格 菏澤語音電銷機(jī)器人加盟公司 湖南電腦外呼系統(tǒng)平臺 廣東防封卡外呼系統(tǒng)原理是什么 長沙智能外呼系統(tǒng) 外呼系統(tǒng)改進(jìn) 地圖標(biāo)注牌 分享百度地圖標(biāo)注多個(gè)位置 電銷機(jī)器人公司 需要哪些牌照
您也可以提供幾個(gè)連接字符串修飾符來控制連接池行為,請參見本主題內(nèi)下文中“使用連接字符串關(guān)鍵字控制連接池”這一節(jié)。

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

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

在以下示例中,將創(chuàng)建三個(gè)新的 SqlConnection 對象,但只需要使用兩個(gè)連接池來管理這些對象。請注意,第一個(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)建,直到活動進(jìn)程終止時(shí)才會被毀壞。非活動或空池的維護(hù)只需要最少的系統(tǒng)開銷。

連接的添加

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

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

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

警告   建議使用完 Connection 后始終將其關(guān)閉,以便連接可以返回到池中。這可以使用 Connection 對象的 Close 或 Dispose 方法來實(shí)現(xiàn)。不是顯式關(guān)閉的連接可能不會添加或返回到池中。例如,如果連接已超出范圍但沒有顯式關(guān)閉,則僅當(dāng)達(dá)到最大池大小而該連接仍然有效時(shí),該連接才會返回到連接池中。
注意   不要在類的 Finalize 方法中對 Connection、DataReader 或任何其他托管對象調(diào)用 Close 或 Dispose。在終結(jié)器中,僅釋放類直接擁有的非托管資源。如果類不擁有任何非托管資源,則不要在類定義中包含 Finalize 方法。有關(guān)更多信息,請參見垃圾回收編程

連接的移除

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

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

事務(wù)支持

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

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

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

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

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

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

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

Connection Reset 'true' 確定在從池中移除數(shù)據(jù)庫連接時(shí)是否將其重置。對于 Microsoft SQL Server 版本 7.0,如果設(shè)置為 false,將避免在獲取連接時(shí)經(jīng)歷一個(gè)額外的往返過程,但必須注意的是連接狀態(tài)(如數(shù)據(jù)庫上下文)不會被重置。
Enlist 'true' 當(dāng)為 true 時(shí),如果存在事務(wù)上下文,池管理程序?qū)⒆詣釉趧?chuàng)建線程的當(dāng)前事務(wù)上下文中登記連接。
Max Pool Size 100 池中允許的最大連接數(shù)。
Min Pool Size 0 池中維護(hù)的最小連接數(shù)。
Pooling 'true' 當(dāng)為 true 時(shí),將從相應(yīng)的池中取出連接,或者在必要時(shí)創(chuàng)建連接并將其添加到相應(yīng)的池中。

連接池的性能計(jì)數(shù)器

SQL Server .NET Framework 數(shù)據(jù)提供程序添加了幾個(gè)性能計(jì)數(shù)器,它們將使您能夠微調(diào)連接池特性,檢測與失敗的連接嘗試相關(guān)的間歇性問題,并檢測與對 SQL Server 的超時(shí)請求相關(guān)的問題。

下表列出了可以在“.NET CLR 數(shù)據(jù)”性能對象下的“性能監(jiān)視器”中訪問的連接池計(jì)數(shù)器。

計(jì)數(shù)器 說明
SqlClient: Current # pooled and non pooled connections 當(dāng)前池連接或非池連接的數(shù)目。
SqlClient: Current # pooled connections 當(dāng)前所有池中與特定進(jìn)程關(guān)聯(lián)的連接的數(shù)目。
SqlClient: Current # connection pools 當(dāng)前與特定進(jìn)程關(guān)聯(lián)的池的數(shù)目。
SqlClient: Peak # pooled connections 自特定進(jìn)程開始以來所有池中的連接數(shù)峰值。請注意:此計(jì)數(shù)器只有在與特定進(jìn)程實(shí)例關(guān)聯(lián)時(shí)才可用。_Global 實(shí)例始終返回 0。
SqlClient: Total # failed connects 打開連接的嘗試因任何原因而失敗的總次數(shù)。
注意   將 SQL Server .NET Framework 數(shù)據(jù)提供程序性能計(jì)數(shù)器與 ASP.NET 應(yīng)用程序一起使用時(shí),只有 _Global 實(shí)例是可用的。因此,性能計(jì)數(shù)器返回的值是所有 ASP.NET 應(yīng)用程序的計(jì)數(shù)器值的總和。

標(biāo)簽:呼和浩特 商洛 珠海 福建 泉州 西寧 美容院 天水

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《.NET Framework SQL Server 數(shù)據(jù)提供程序連接池》,本文關(guān)鍵詞  .NET,Framework,SQL,Server,數(shù)據(jù),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《.NET Framework SQL Server 數(shù)據(jù)提供程序連接池》相關(guān)的同類信息!
  • 本頁收集關(guān)于.NET Framework SQL Server 數(shù)據(jù)提供程序連接池的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章

    上一篇:Sql 語句學(xué)習(xí)指南第1/2頁

    下一篇:對有自增長字段的表導(dǎo)入數(shù)據(jù)注意事項(xiàng)

    河间市| 福建省| 醴陵市| 吉林省| 辽阳市| 中江县| 新野县| 南召县| 河曲县| 旬阳县| 黄龙县| 焦作市| 普陀区| 榆树市| 广水市| 博客| 阿图什市| 虹口区| 奎屯市| 钦州市| 张家川| 桃江县| 天津市| 盖州市| 兴国县| 株洲县| 文成县| 澄江县| 普格县| 门头沟区| 中宁县| 同德县| 博罗县| 全州县| 曲阜市| 尼玛县| 福建省| 西城区| 建平县| 淳化县| 仪征市|