說出資料連線池的工作機制是什麼?
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
首先說明下關於資料庫連線池:
資料庫連線是一種關鍵的有限的昂貴的資源,這一點在多使用者的網頁應用程式中體現得尤為突出。對資料庫連線的管理能顯著影響到整個應用程式的伸縮性和健壯性,影響到程式的效能指標。資料庫連線池正是針對這個問題提出來的。
資料庫連線池負責分配、管理和釋放資料庫連線,它允許應用程式重複使用一個現有的資料庫連線,而再不是重新建立一個;釋放空閒時間超過最大空閒時間的資料庫連線來避免因為沒有釋放資料庫連線而引起的資料庫連線遺漏。這項技術能明顯提高對資料庫操作的效能。
資料庫連線池在初始化時將建立一定數量的資料庫連線放到連線池中,這些資料庫連線的數量是由最小資料庫連線數來設定的。無論這些資料庫連線是否被 使用,連線池都將一直保證至少擁有這麼多的連線數量。連線池的最大資料庫連線數量限定了這個連線池能佔有的最大連線數,當應用程式向連線池請求的連線數超 過最大連線數量時,這些請求將被加入到等待佇列中。
資料庫連線池的最小連線數和最大連線數的設定要考慮到下列幾個因素:
1) 最小連線數是連線池一直保持的資料庫連線,所以如果應用程式對資料庫連線的使用量不大,將會有大量的資料庫連線資源被浪費;
2) 最大連線數是連線池能申請的最大連線數,如果資料庫連線請求超過此數,後面的資料庫連線請求將被加入到等待佇列中,這會影響之後的資料庫操作。
3) 如果最小連線數與最大連線數相差太大,那麼最先的連線請求將會獲利,之後超過最小連線數量的連線請求等價於建立一個新的資料庫連線。不過,這些大於最小連線數的資料庫連線在使用完不會馬上被釋放,它將被放到連線池中等待重複使用或是空閒超時後被釋放。