假設我們在一個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.
再次證明了實踐出真知。