[SQL] Connection Pool測試

首先是簡介,以下介紹來源自 寫的Connection Pool

Connection Pool(連線池) 是一種資料庫連線管理的機制,它介於應用程式與資料庫之間;集中管理資料庫的連線,能有效提升應用程式存取資料庫的效能及減少連線的錯誤。

為什麼要有Connection Pool呢? 如圖一,一般沒有使用Connection Pool的程式,當需要存取資料庫時,便要建立一個直接與DB相連的連線(Physical Connection)。

未命名

此做法比較不好的地方在於:

  1. 資料庫連線的建立成本是昂貴的,故當有許多Thread都需要建立connection時,其資源的耗費是龐大的。
  2. 一個成本昂貴的connection在程式使用完後,馬上就被Close掉,在使用上並沒有達到效益極大化。
  3. 程式中請求建立的總連線數可能超過DB允許的連線數而發生Exception。

 

AP中加入Connection Pool後,其運行機制如下圖所示。

未命名2

使用Connection Pool的好處有:

  1. Pool會keep住與DB的連線。程式需要使用時跟pool要即可。不用再重複地跟DB建立連線然後又釋放掉。
  2. 可設定與DB最大的連線數,避免超過DB所能負擔的連線數。
  3. Pool可幫忙驗證Connection是否還正常,若不正常時,便再與DB建立好的正常連線,確保程式取得的Connection都是正常可使用的。
  4. 額外功能的提供。如幫忙檢查Connection State或幫忙關閉Statement等。不同的Connection Pool其額外提供的功能當然也會有所不同。

 

 

接下來是我的測試小程式,使用C#及SQL_Server 2008R2。
連線字串如下:

  • Pooling Off:
    “Data Source=192.168.56.101;Initial Catalog=XXX_DB;Persist Security Info=False;User ID=XXX_Tester;Password=XXXX;Pooling=false;
  • Pooling On:
    “Data Source=192.168.56.101;Initial Catalog=XXX_DB;Persist Security Info=False;User ID=XXX_Tester;Password=XXXX;" + “Min Pool Size=10;Max Pool Size=100;Pooling=true;";

實驗結果如下兩張圖,可以看出很明顯的差異。

2015-12-31 下午 03-26-012015-12-31 下午 03-26-23

 

另外值得一提的是,SqlConnection預設就有將ConnectionPool開啟。
2015-12-31 下午 03-16-04

 

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s