国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

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

2024-08-31 00:49:28
字體:
供稿:網(wǎng)友

有朋友建議我控制連接池的連接,說是為了提高性能,但看了下面的這個文章,感覺連接池是由系統(tǒng)自身進行維護的,程序沒有必要去進行控制的。大家有什么意見嗎?在連接問題上,是否有提高性能的方法?
sql server .net framework 數(shù)據(jù)提供程序連接池
池連接可以顯著提高應用程序的性能和可縮放性。sql server .net framework 數(shù)據(jù)提供程序自動為 ado.net 客戶端應用程序提供連接池。您也可以提供幾個連接字符串修飾符來控制連接池行為,請參見本主題內(nèi)下文中“使用連接字符串關(guān)鍵字控制連接池”這一節(jié)。

池的創(chuàng)建和分配
當連接打開時,將根據(jù)一種精確的匹配算法來創(chuàng)建連接池,該算法會使連接池與連接中的字符串相關(guān)聯(lián)。每個連接池都與一個不同的連接字符串相關(guā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 對象時,如果存在可用的連接,則將從池中獲取該對象。若要成為可用連接,該連接當前必須未被使用,具有匹配的事務上下文或者不與任何事務上下文相關(guān)聯(lián),并且具有與服務器的有效鏈接。

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

警告 建議使用完 connection 后始終將其關(guān)閉,以便連接可以返回到池中。這可以使用 connection 對象的 close 或 dispose 方法來實現(xiàn)。不是顯式關(guān)閉的連接可能不會添加或返回到池中。例如,如果連接已超出范圍但沒有顯式關(guān)閉,則僅當達到最大池大小而該連接仍然有效時,該連接才會返回到連接池中。
注意 不要在類的 finalize 方法中對 connection、datareader 或任何其他托管對象調(diào)用 close 或 dispose。在終結(jié)器中,僅釋放類直接擁有的非托管資源。如果類不擁有任何非托管資源,則不要在類定義中包含 finalize 方法。有關(guān)更多信息,請參見垃圾回收編程。
連接的移除
如果連接生存期已過期,或者連接池管理程序檢測到與服務器的連接已斷開,連接池管理程序?qū)某刂幸瞥撨B接。請注意,只有在嘗試與服務器進行通信后,才可以檢測到這種情況。如果發(fā)現(xiàn)某連接不再連接到服務器,則會將其標記為無效。連接池管理程序會定期掃描連接池,查找已釋放到池中并標記為無效的對象。找到后,這些連接將被永久移除。

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

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

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

使用連接字符串關(guān)鍵字控制連接池
sqlconnection 對象的 connectionstring 屬性支持連接字符串鍵/值對,這些鍵/值對可用于調(diào)整連接池邏輯的行為。

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

名稱 默認值 說明
connection lifetime 0 當連接返回到池中時,將對它的創(chuàng)建時間和當前時間進行比較,如果時間間隔超過由 connection lifetime 指定的值(以秒為單位),則會毀壞該連接。在聚集配置中可以使用它來強制在運行服務器和剛聯(lián)機的服務器之間達到負載平衡。
如果值為零 (0),則將使池連接具有最大的超時期限。

connection reset 'true' 確定在從池中移除數(shù)據(jù)庫連接時是否將其重置。對于 microsoft sql server 版本 7.0,如果設置為 false,將避免在獲取連接時經(jīng)歷一個額外的往返過程,但必須注意的是連接狀態(tài)(如數(shù)據(jù)庫上下文)不會被重置。
enlist 'true' 當為 true 時,如果存在事務上下文,池管理程序?qū)⒆詣釉趧?chuàng)建線程的當前事務上下文中登記連接。
max pool size 100 池中允許的最大連接數(shù)。
min pool size 0 池中維護的最小連接數(shù)。
pooling 'true' 當為 true 時,將從相應的池中取出連接,或者在必要時創(chuàng)建連接并將其添加到相應的池中。

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

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

計數(shù)器 說明
sqlclient: current # pooled and non pooled connections 當前池連接或非池連接的數(shù)目。
sqlclient: current # pooled connections 當前所有池中與特定進程關(guān)聯(lián)的連接的數(shù)目。
sqlclient: current # connection pools 當前與特定進程關(guān)聯(lián)的池的數(shù)目。
sqlclient: peak # pooled connections 自特定進程開始以來所有池中的連接數(shù)峰值。請注意:此計數(shù)器只有在與特定進程實例關(guān)聯(lián)時才可用。_global 實例始終返回 0。
sqlclient: total # failed connects 打開連接的嘗試因任何原因而失敗的總次數(shù)。

注意 將 sql server .net framework 數(shù)據(jù)提供程序性能計數(shù)器與 asp.net 應用程序一起使用時,只有 _global 實例是可用的。因此,性能計數(shù)器返回的值是所有 asp.net 應用程序的計數(shù)器值的總和。

最大的網(wǎng)站源碼資源下載站,

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 九台市| 罗山县| 大埔区| 桂东县| 琼结县| 郓城县| 正镶白旗| 平阴县| 怀柔区| 绍兴县| 思茅市| 扎鲁特旗| 公主岭市| 九江市| 东宁县| 高阳县| 织金县| 竹山县| 天津市| 东平县| 武清区| 丹凤县| 唐河县| 馆陶县| 崇仁县| 波密县| 霍州市| 合川市| 湟中县| 莱州市| 崇文区| 措勤县| 华宁县| 安顺市| 浠水县| 厦门市| 西畴县| 辽宁省| 合山市| 乐都县| 甘谷县|