原來自己對連接字符串中Min Pool Size的理解是錯誤的


假設我們在一個ASP.NET應用程序的連接字符串中將Min Pool Size設置為30:

<add name="cnblogs" connectionString="Data Source=.;Initial Catalog=cnblogs;Min Pool Size=30" providerName="System.Data.SqlClient"/>

訪問一下應用程序,然后用Windows Performance Monitor監測一下.NET Data Provider for SqlServer -> NumberOfPooledConnections(連接池中的連接總數):

 

連接池中的連接總數不是30,而是60(見上圖)。Min Pool Size=30,為什么NumberOfPooledConnections會是60?

用Performance Monitor監測一下.NET Data Provider for SqlServer -> NumberOfActiveConnectionPools:

 

原來有2個連接池(Connection Pool),60(NumberOfPooledConnections) = 30(Min Pool Size) × 2(NumberOfActiveConnectionPools),60就是這么來的。

假如這時應用程序中需要的數據庫連接數超過60,情況會怎么樣呢?

NumberOfPooledConnections會變為90,也就是說ADO.NET創建了一個新的連接池(NumberOfActiveConnectionPools由2變為3),並且這個連接池中包含30個連接(Min Pool Size = 30)。

當發現這個時,我才知道自己以前對Min Pool Size的理解完全是錯誤的。以前以為只有一個連接池,當設置了Min Pool Size = 30,在初始化創建連接池時,會創建30個數據庫連接;當30個連接不夠用時,會需要多少就創建多少。

而MSDN中對Min Pool Size的解釋真夠簡單:The minimum number of connections maintained in the pool. 

再次證明了實踐出真知。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM