數據庫連接池

  1. 爲什麼會出現連接池?

在java中,對數據庫的操作,都是基於jdbc的,jdbc每執行一次數據庫操作,都需要先獲取數據庫連接,完成對數據庫的操作之後,再關閉coonnection。

 

由於頻繁的打開和關閉連接對jvm包括數據庫都有一定的資源負荷,尤其應用壓力較大時資源佔用比較多容易產生性能問題。於是就有了連接池

  1. 什麼是連接池?

 

 

先打開一定數量的數據庫連接,當使用的時候分配給調用者,調用完畢後返回給連接池,注意返回給連接池後這些連接並不會關閉,而是

準備給下一個調用者進行分配。由此可以看出連接池節省了大量的數據庫連接打開和關閉的動作,對系統性能提升的益處不言而喻。下面我們通過連接池幾個屬性的意義,來看連接池是如何提高系統性能的。

  1. 如何使用連接池

連接池現在有了很多產品,在這裏我們以阿里的連接池爲例說明

 

對幾個屬性進行說明:

maxIdle:連接池中最大的空閒的連接數,超過的空閒連接將被釋放,如果設置爲負數表示不限制;表示即使連接池中所有的數據庫連接都處於空閒狀態,也可以保持maxIdle數量的空閒連接

minIdle:連接池中最小的空閒的連接數,低於這個數量會被創建新的連接。

 

 

removeAbandonedTimeout  :超過時間限制,回收沒有用(廢棄)的連接(默認爲 300秒,調整爲180

removeAbandoned  :超過removeAbandonedTimeout時間後,是否進行沒用連接(廢棄)的回收(默認爲false,調整爲true)

 

以設定maxIdle爲20minIdle爲10,removeAbandonedTimeout爲30爲例,

應用一旦啓動則首先打開10個數據庫連接,但注意此時正在使用的數據庫連接爲0,空閒的數據庫連接數量爲10。

你開始登錄,假設登錄代碼使用了一個連接進行查詢,那麼此時正在使用的數據庫連接池的數字爲1、空閒數爲9,不需要從數據庫打開新的數據庫連接。

當你登錄結束後,正在使用的數據庫的連接數量爲0,空閒的數據庫連接的數量爲10。

 

當有11個人同時登錄這個系統的時候,空閒的數據庫連接不夠,連接池從數據庫新申請(打開)了一個連接,連同另外的10個一併送出,這個瞬間連接池的使用數是11個

11個人登錄結束後,正在使用的數據庫連接爲0,連接池中空閒的連接數目在一定的時間內爲11,因爲minIdle<11<maxIdle。

 

當有21個人同時登錄呢?那第21個人就只能等前面的某個人登錄完畢後釋放連接給他。

這時連接池開啓了20個數據庫連接,當在一定的時間內,沒有任何人訪問這個系統的時候,連接池中會一直有20個空閒連接嗎?

當然不,連接池會在removeAbandonedTimeout設定的時間後關閉(maxIdle -minIdle)的連接還給數據庫,在這個例子裏數字是20-10=10,因爲只需要保持最小空閒連接數就好。

 

maxWait :最大等待時間,當沒有空閒連接時,應用等待連接池內被佔用的數據庫連接被釋放的最大時間,超過該時間限制會拋出異常,如果設置-1表示無限等待(默認爲無限,調整爲60000ms,避免因線程池不夠用,而導致請求被無限制掛起)

maxActive表示併發情況下最大可從連接池中獲取的連接數。如果數據庫不是單獨,供一個應用使用,通過設置maxActive參數可以避免某個應用無限制的獲取連接對其 他應用造成影響,如果一個數據庫只是用來支持一個應用那麼maxActive理論上可以設置成該數據庫可以支撐的最大連接數。


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