數據庫連接池探究

1.簡介

       數據庫連接是一種關鍵的有限的昂貴的資源,這一點在多用戶的網頁應用程序中體現得尤爲突出。對數據庫連接的管理能顯著影響到整個應用程序的伸縮性和健壯性,影響到程序的性能指標。數據庫連接池正是針對這個問題提出來的。數據庫連接池負責分配、管理和釋放數據庫連接,它允許應用程序重複使用一個現有的數據庫連接,而再不是重新建立一個;釋放空閒時間超過最大空閒時間的數據庫連接來避免因爲沒有釋放數據庫連接而引起的數據庫連接遺漏。這項技術能明顯提高對數據庫操作的性能。


2.實現策略

1)添加數據庫連接池配置

       需要添加數據庫連接池的一些配置如內存分配的大小,失敗處理函數,監控重試次數等。


2)添加數據庫服務器配置

       添加數據庫服務器配置的時候,需要添加服務的配置有數據庫的ip, port, username,password, dbname, charset和最大連接數,最小連接數,連接超時時間,寫超時,讀超時等參數。


3)初始化數據庫連接池

       在加載了數據庫服務器配置以後,會對該數據庫服務器的連接池進行初始化,創建出數量爲最小連接數的連接放在池裏,等待取用。


4)取用連接

       從數據庫連接池中取出一個連接進行使用


5)放回連接

       將用完的數據庫連接放回到數據庫連接池中供後續使用,在放回的時候需要添加一個參數,說明這個連接是否損壞,如果損壞的話將做上標記,不會將其提供給下次連接取用。


6)連接池定時調度

       數據庫連接池一個比較大的特點就是可以對性能有較大的提升,而這個提升正是通過定時調度來實現的。如果沒有連接池的話,每次查詢都要創建連接,查詢完都要釋放連接這樣不停的創建和釋放比較消耗資源,連接池的特點就是對池中的所有連接進行統一的調度,將資源很好的分配,達到高性能的目的。

       具體說說連接池定時調度的策略,通常情況下是這樣的,維護兩個值,當前連接數current_conn和連接池應該具有的連接數need_conn,current_conn是根據客戶端使用的連接產生的,need_conn通常是currrent_conn的125%(這個值是可配的),也就是說數據庫連接池中的連接數應該是當前連接數的125%,這樣做的目的是做一個緩衝,防止兩次調度之間連接數迅速增加。

       但是need_conn還受最大連接數和最小連接數的約束,也就是說need_conn的最大不能超過最大連接數(以保證連接池不佔用太多的資源),最小不能低於最小連接數(以保證連接池的高效和資源合理運用)。

       在數據庫連接池定時調度的時候需要將連接池中不正常的連接刪除,另外,創建或者釋放連接,使得數據庫連接池的連接數和need_conn相同。


7)數據庫連接池的風險與解決方案

       在實際中會常常遇到這種問題,因爲連接的波動造成的連接失敗。如連接池定時調度爲3s,最小連接數爲20,最大連接數爲50。當前的連接數是10,這時,連接池中的實際連接數爲20,突然在3s內當前連接數漲到30,這時還沒有進行定時調度,連接池的實際連接數還是20,小於需要的連接數,這個時候就會造成連接失敗的情況。

       對於上述問題的解決方案是(1)增大最小連接數,以防止數據的波動造成的連接數不夠,(2)減小定時調度的時間間隔,這樣將數據庫連接池的定時調度頻率提高,消耗更多的資源卻不一定能有好的收益。(3)增加連接池的緩衝額度,將125%提高至更高,這樣可以應對突然增長的連接,但是缺陷在於需要在連接池中創建出更多的連接,消耗更多的資源。這三種解決方案要視具體的連接數波動情況而定,分析連接數的表化情況,選擇較爲合理的解決方案。

參考文獻

http://baike.baidu.com/view/84055.htm

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章