資料庫連接配接(Database Connection Pool)是一種關鍵的、有限的、昂貴的資源,這一點在多使用者的網頁應用程式中展現得尤為突出。對資料庫連接配接的管理能顯著影響到整個應用程式的伸縮性和健壯性,影響到程式的性能名額。資料庫連接配接池正是針對這個問題提出來的。
資料庫連接配接池負責配置設定、管理和釋放資料庫連接配接,它允許應用程式重複使用一個現有的資料庫連接配接,而不是再重建立立一個;釋放空閑時間超過最大空閑時間的資料庫連接配接來避免因為沒有釋放資料庫連接配接而引起的資料庫連接配接遺漏。這項技術能明顯提高對資料庫操作的性能。
資料庫連接配接池在初始化時将建立一定數量的資料庫連接配接放到連接配接池中,這些資料庫連接配接的數量是由最小資料庫連接配接數制約。無論這些資料庫連接配接是否被使用,連接配接池都将一直保證至少擁有這麼多的連接配接數量。連接配接池的最大資料庫連接配接數量限定了這個連接配接池能占有的最大連接配接數,當應用程式向連接配接池請求的連接配接數超過最大連接配接數量時,這些請求将被加入到等待隊列中。
資料庫連接配接池的最小連接配接數和最大連接配接數的設定要考慮到下列幾個因素:
(1) 最小連接配接數:是連接配接池一直保持的資料庫連接配接,是以如果應用程式對資料庫連接配接的使用量不大,将會有大量的資料庫連接配接資源被浪費。
(2) 最大連接配接數:是連接配接池能申請的最大連接配接數,如果資料庫連接配接請求超過此數,後面的資料庫連接配接請求将被加入到等待隊列中,這會影響之後的資料庫操作。
(3) 最小連接配接數與最大連接配接數差距:最小連接配接數與最大連接配接數相差太大,那麼最先的連接配接請求将會獲利,之後超過最小連接配接數量的連接配接請求等價于建立一個新的資料庫連接配接。不過,這些大于最小連接配接數的資料庫連接配接在使用完不會馬上被釋放,它将被放到連接配接池中等待重複使用或是空閑逾時後被釋放。
連接配接池減少了必須打開新連接配接的次數。該池程序保持實體連接配接的所有權。它通過為每個給定的連接配接配置保留一組活動的連接配接來管理連接配接。每當使用者調用打開連接配接時,池管理器就會在池中尋找可用的連接配接。如果池化連接配接可用,則将其傳回給調用方,而不是打開新連接配接。當應用程式調用關閉連接配接時,池化程式将其傳回到活動連接配接的池化集中,而不是将其關閉。一旦連接配接傳回到池中,就可以在下一個打開調用中重用該連接配接。池連接配接可以顯着提高應用程式的性能和可伸縮性。
連接配接池基本的思想是在系統初始化的時候,将資料庫連接配接作為對象存儲在記憶體中,當使用者需要通路資料庫時,并非建立一個新的連接配接,而是從連接配接池中取出一個已建立的空閑連接配接對象。使用完畢後,使用者也并非将連接配接關閉,而是将連接配接放回連接配接池中,以供下一個請求通路使用。而連接配接的建立、斷開都由連接配接池自身來管理。同時,還可以通過設定連接配接池的參數來控制連接配接池中的初始連接配接數、連接配接的上下限數以及每個連接配接的最大使用次數、最大空閑時間等等。也可以通過其自身的管理機制來監視資料庫連接配接的數量、使用情況等。
資料來源:
- 資料庫連接配接池的實作及原理 http://blog.sina.com.cn/s/blog_6f688450010148d2.html
- Connection Pooling https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/connection-pooling
- SQL Server Connection Pooling (ADO.NET) https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql-server-connection-pooling