author:skate
time:2010-10-13
資料庫連線池的工作原理
連線池就是連線資料庫物件的緩衝儲存池 ,就是預先建立一些連線放置於緩衝儲存池中以備使用,當.net應用程式中需要建立與資料庫連線時,只需從緩衝儲存池中取乙個連線用,而不用新建。使用完畢後,只需釋放回緩衝儲存池即可。連線池內部提供一種管理機制,實時地對應用程式提供獲取和釋放連線的介面。客戶端可以透明地共享連線池中的多個連線物件。下面就已.net連線池為例。
1.1 連線池的建立
使用ado.net連線池機制訪問sql server資料庫時,必須清楚連線是通過對連線字串精確匹配的法則被池化的。當連線開啟時,將根據一種精確的匹配演算法來建立連線池,該演算法會使連線池與連線中的字串相關聯。每個連線池都與乙個不同的連線字串相關聯。當新連線開啟時,如果連線字串不精確匹配現有池,則將建立乙個新池。
1.2 連線池的管理策略
連線池是為每個唯一連線字串建立的。建立乙個池後,將建立多個連線物件並將其新增到該池中,以滿足最小池大小的要求。連線將根據需要新增到池中,直至達到最大池大小。連線池設有空閒佇列和已分配佇列。空閒佇列存放未分配的連線,已分配佇列存放正在使用的連線。連線池的管理包括三個重要環節:請求連線、釋放連線和移除連線。
請求連線:
當.net應用程式請求連線sql server資料庫時,如果存在空閒的連線,則將從池中獲取連線物件。若沒有空閒的連線,且連線池中的連線數未達到最大連線數時,則生成乙個新的連線例項分配給應用程式。若連線池中的連線數已達到最大連線數,則將應用程式的請求放入等待佇列,若在規定的等待時間內有可用的連線,則應用程式取得相應的連線。否則連線請求失敗。
釋放連線:
.net應用程式通過呼叫連線物件的close或者dispose方法使連線返回到連線池中,這就是通常所說的顯式關閉連線。建議在使用完連線物件後總是顯式關閉連線,以便使連線能夠返回到連線池中。沒有顯式關閉的連線可能不會新增或者返回到連線池裡,只有連線數目達到了最大值且該連線仍然有效時才會被返回到連線池中。
連線移除:
連線池管理程式會定期掃瞄連線池,如果檢測到與伺服器的連線已斷開,連線池管理程式將從池中移除該連線。值得說明的是,只有在嘗試與伺服器進行通訊後,才可以檢測到這種情況,如果掃瞄到某連線不再連線到伺服器,則會將其標記為無效。對於已釋放到池中並標記為無效的物件,管理程式將永久移除這些連線。如果檢測到與伺服器的連線沒有斷開但連線生存期已過期,連線也將被移除。.net應用程式呼叫連線物件的close或者dispose方法關閉連線時,並不是真正關閉實際的資料連線,若超過預設時間(60秒)未再次使用,才會真正被關閉。
連線池的關閉
連線池一旦建立,直到活動程序終止時才會被銷毀。當.net應用程式退出時,關閉連線池,此時應把在連線池建立時向資料庫申請的連線物件統一歸還給資料庫。
連線池設計的必要性
ado.net有四種資料提供程式sqlclient、oledb、odbe、oracleclienti ,如果使用的是oledbconnection、odbc-connection或oracleconnection類,則連線池將由提供程式自動處理,不必自己進行管理。若使用sqlconnection類,則連線池被隱式管理,但也提供選項允許自己管理池。訪問sql server資料庫當然用sqlclient資料提供程式。
-------end-------
資料庫連線池 Redis連線池
基本原理 在內部物件池中,維護一定數量的資料庫連線,並對外暴露資料庫連線的獲取和返回方法。如外部使用者可通過getconnection方法獲取資料庫連線,使用完畢後再通過releaseconnection方法將連線返回,注意此時的連線並沒有關閉,而是由連線池管理器 並為下一次使用做好準備。2.作用 ...
資料庫連線池
實現資料連線池,讓系統有更高有執行效率 using system using system.data using system.data.sqlclient using system.collections using system.threading public class dataaccess...
資料庫連線池
資料庫連線池概述 資料庫連線是一種關鍵的有限的昂貴的資源,這一點在多使用者的網頁應用程式中體現得尤為突出。對資料庫連線的管理能顯著影響到整個應用程式的伸縮性和健壯性,影響到程式的效能指標。資料庫連線池正是針對這個問題提出來的。資料庫連線池負責分配 管理和釋放資料庫連線,它允許應用程式重複使用乙個現有...