概念:sql
最原始的數據庫使用就是打開一個鏈接並進行使用,使用事後關閉鏈接釋放資源。因爲頻繁的打開和關閉鏈接對jvm包括數據庫
都有必定的資源負荷,尤爲應用壓力較大時資源佔用比較多容易產生性能問題。由此使用鏈接池的做用就顯現出來,他的原理其實不復雜:
先打開必定數量的數據庫鏈接,當使用的時候分配給調用者,調用完畢後返回給鏈接池,注意返回給鏈接池後這些鏈接並不會關閉,而是
準備給下一個調用者進行分配。由此能夠看出鏈接池節省了大量的數據庫鏈接打開和關閉的動做,對系統性能提高的益處不言而喻。
最小鏈接--應用啓動後隨即打開的鏈接數以及後續最小維持的鏈接數。
最大鏈接數--應用可以使用的最多的鏈接數
鏈接增加數--應用每次新打開的鏈接個數數據庫
舉個例子說明鏈接池的運做:
假設設置了最小和最大的鏈接爲10,20,那麼應用一旦啓動則首先打開10個數據庫鏈接,但注意此時數據庫鏈接池的正在使用數字爲0--由於你並無使用這些鏈接,而空閒的數量則是10。而後你開始登陸,假設登陸代碼使用了一個鏈接進行查詢,那麼此時數據庫鏈接池的正在使用數字爲一、空閒數爲9,這並不須要從數據庫打開鏈接--由於鏈接池已經準備好了10個給你留着呢。登陸結束了,當前鏈接池的鏈接數量是多少?固然是0,由於那個鏈接隨着事務的結束已經返還給鏈接池了。而後同時有11我的在同一秒進行登陸,會發生什麼:鏈接池從數據庫新申請(打開)了一個鏈接,連同另外的10個一併送出,這個瞬間鏈接池的使用數是11個,不過不要緊正常狀況下過一下子又會變成0。若是同時有21我的登陸呢?那第21我的就只能等前面的某我的登陸完畢後釋放鏈接給他。這時鏈接池開啓了20個數據庫鏈接--雖然極可能正在使用數量的已經降爲0,那麼20個鏈接會一直保持嗎?固然不,鏈接池會在必定時間內關閉必定量的鏈接還給數據庫,在這個例子裏數字druid是20-10=10,由於只須要保持最小鏈接數就行了,而這個時間週期也是鏈接池裏配置的。jvm
常見開源數據鏈接池:性能
1)DBCP優化
DBCP是一個依賴Jakarta commons-pool對象池機制的數據庫鏈接池.DBCP能夠直接的在應用程序中使用,Tomcat的數據源使用的就是DBCP。ui