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