數據庫連接池的工作機制是什么


 

數據庫連接是一種關鍵的有限的昂貴的資源,這一點企業級應用程序中體現得尤為突出。對數據庫連接的管理能顯著影響到整個應用程序的伸縮性和健壯性,影響到程序的性能指標。數據庫連接池正是針對這個問題提出來的。

    數據庫連接池負責分配、管理和釋放數據庫連接,它允許應用程序重復使用一個現有的數據庫連接,而再不是重新建立一個;釋放空閑時間超過最大空閑時間的數據庫連接來避免因為沒有釋放數據庫連接而引起的數據庫連接遺漏。這項技術能明顯提高對數據庫操作的性能。

具體工作機制如下:

數據庫連接池在初始化時將創建一定數量的數據庫連接放到連接池中,這些數據庫連接的數量是由最小數據庫連接數來設定的。無論這些數據庫連接是否被使用,連接池都將一直保證至少擁有這么多的連接數量。連接池的最大數據庫連接數量限定了這個連接池能占有的最大連接數,當應用程序向連接池請求的連接數超過最大連接數量時,這些請求將被加入到等待隊列中。

數據庫連接池的最小連接數和最大連接數的設置要考慮到下列幾個因素:

  1) 最小連接數是連接池一直保持的數據庫連接,所以如果應用程序對數據庫連接的使用量不大,將會有大量的數據庫連接資源被浪費;

  2) 最大連接數是連接池能申請的最大連接數,如果數據庫連接請求超過此數,后面的數據庫連接請求將被加入到等待隊列中,這會影響之后的數據庫操作。

  3) 如果最小連接數與最大連接數相差太大,那么最先的連接請求將會獲利,之后超過最小連接數量的連接請求等價於建立一個新的數據庫連接。不過,這些大於最小連接數的數據庫連接在使用完不會馬上被釋放,它將被放到連接池中等待重復使用或是空閑超時后被釋放。

===================================================================

J2EE服務器啟動時會建立一定數量的池連接,並一直維持不少於此數目的池連接。


   調用:客戶端程序需要連接時,池驅動程序會返回一個未使用的池連接並將其表記為 忙。如果當前沒有空閑連接,池驅動程序就新建一定數量的連接,新建連接的數量有配置參數決定。


釋放:當使用的池連接調用完成后,池驅動程序將此連接表記為空閑, 其他調用就可以使用這個連接。

 

最大維持連接數:沒有任何請求時在連接池中可以存在的連接數

最大連接數:連接池中最多可以存在的連接個數。

最大等待時間:當斷開連接時,超過最大維持連接數的連接不會馬上銷毀,最大等待時間過后它才會銷毀。

連接池是將已經創建好的連接保存在池中,當有請求來時,直接使用已經創建好的連接對數據庫進行訪問。這樣省略了創建連接和銷毀連接的過程。

現在假設:最大維持連接數是10,最大連接數是20,最大等待時間是10000(毫秒)

其過程:最開始在連接池中有10個連接(最大連接數),當有用戶申請連接時,其將一個連接分配用戶,直到連接池中的10個連接全都分配出去,當第11個用戶申請連接時,它將創建第11個連接並分配給該用戶,直到把第20個連接(最大連接數)分配給第20個用戶,當第21個用戶申請連接時,它需要等待,直到前面的20個用戶中某一個斷開了連接,才會把那個連接分配給第21個用戶,當用戶斷開連接時(第11至20個連接),該連接不會立刻被釋放而是需要等待10000毫秒(最大等待時間),才被釋放,當沒有用戶連接時,連接池內還保持10個連接。

在開發中,使用連接池時若沒有關閉連接(調用連接的close方法)會出現“連接池疲勞的錯誤”。

 

數據連接池的主要作用是什么?

數據連接池是把數據庫連接放到中間服務器上,比如tomcat上,那么相當於每次你操作數據庫的時候就不需要再"連接"到數據庫再進行相關操作,而是直接操作服務器上的"連接池",你可以根據字面意思進行理解,把數據庫當做一條小溪,那么"連接池"就是一個"水池",這個水池里面的水是由事先架好的通向"小溪"的水管引進來的,所以,你想喝水的時候不必大老遠地跑到小溪邊上,而只要到這個水池就可以.這樣的話就可以提高"效率".但是數據池一般是用在數據量比較大的項目,這樣可以提高程序的效率,想一想這樣的話是不是就把相關的負荷加在了服務器上,因為這個"池"是在服務器上的,對於小數據量處理的項目不推薦使用,應為過於頻繁的請求會使得服務器負載加重

關系:

  你 -->"水池"-->小溪(快速喝水)

  程序-->"數據池"-->數據庫(快速存取)

就是這樣,也不用把它想神秘了,我是這樣理解的,也就這樣說了,希望對你有幫助

 

數據連接池怎么設置?

在數據庫連接字段的時候可以設置

 

比如:“DataSource=Server;Initial;Catalog=db;UserID=test;Password=test;

  MaxPoolSize = 100;MinPoolSize= 15”

 

這樣 連接池 最大為100,最小為15

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM