2022年5月2日 星期一

[研究][ASP.NET]SQL Server 資料庫連線池(連線集區、Connection Pool、連線共用)

[研究][ASP.NET]SQL Server 資料庫連線池

2022-05-02

環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C#

********************************************************************************

最近研究,筆記一下,先看一下

SQL Server 連接共用 (ADO.NET)
https://docs.microsoft.com/zh-tw/dotnet/framework/data/adonet/sql-server-connection-pooling

SQL Server Connection Pooling (ADO.NET)
https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql-server-connection-pooling

資料庫的連線建立很花時間,所以每一個連線,就放在一個 Pool 中,下次若使用的連線已經在某個 Pool 中,直接拿來用,可節省時間。

using (SqlConnection connection = new SqlConnection(  
  "Integrated Security=SSPI;Initial Catalog=Northwind"))  
    {  
        connection.Open();
        // Pool A is created.  
    }  
  
using (SqlConnection connection = new SqlConnection(  
  "Integrated Security=SSPI;Initial Catalog=pubs"))  
    {  
        connection.Open();
        // Pool B is created because the connection strings differ.  
    }  
  
using (SqlConnection connection = new SqlConnection(  
  "Integrated Security=SSPI;Initial Catalog=Northwind"))  
    {  
        connection.Open();
        // The connection string matches pool A.  
    }  

該官方網頁說:如果集區中的連接已閒置大約 4 到 8 分鐘,或如果共用器偵測到與伺服器的連接已嚴重損毀,則連接共用器會從集區中移除該連接。

根據非官方資料,Pool 的預設值是 100,最小 0,最大 32767,可在連線字串(Connection String) 中使用 max pool size 和 min pool size 進行設定,例如:

"server=(local); integrated security=sspi; database=northwind; max pool size=75; min pool size=5"

一般而言,Pool 會夠用,真不夠用,可以變更設定值,或進行清空

 SqlConnection.ClearPool(SqlConnection connection) 清空關聯的連線池

SqlConnection.ClearAllPools() 清空所有連線池

敝人沒找到 SQL Server 每個 Pool 占用的 Memory,根據這篇,MongoDB是10 MB

https://stackoverflow.com/questions/33357518/calculating-needed-memory-for-n-connection-pools-for-mongodb-running-on-node-js

(完)

相關

SqlConnection.ClearPool(SqlConnection) 方法 (System.Data.SqlClient) | Microsoft Docs
https://docs.microsoft.com/zh-tw/dotnet/api/system.data.sqlclient.sqlconnection.clearpool?view=dotnet-plat-ext-6.0

SqlConnection.ClearAllPools 方法 (System.Data.SqlClient) | Microsoft Docs
https://docs.microsoft.com/zh-tw/dotnet/api/system.data.sqlclient.sqlconnection.clearallpools?view=dotnet-plat-ext-6.0

SqlConnectionStringBuilder.MaxPoolSize 屬性 (System.Data.SqlClient) | Microsoft Docs
https://docs.microsoft.com/zh-tw/dotnet/api/system.data.sqlclient.sqlconnectionstringbuilder.maxpoolsize?view=dotnet-plat-ext-6.0

SQL Connection Pooling 行為觀察-黑暗執行緒

https://blog.darkthread.net/blog/sql-conn-pooling-experiment/



沒有留言:

張貼留言