亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

DBCP連接池介紹

發布時間:2020-07-12 03:59:53 來源:網絡 閱讀:6725 作者:羅大俠WY 欄目:數據庫
# 初始化連接:連接池啟動時創建的初始化連接數量
initialSize=1
# 最小空閑連接:連接池中容許保持空閑狀態的最小連接數量,低于這個數量將創建新的連接,如果設置為0則不創建
minIdle=1
# 最大空閑連接:連接池中容許保持空閑狀態的最大連接數量,超過的空閑連接將被釋放,如果設置為負數表示不限制
maxIdle=2
# 最大活動連接:連接池在同一時間能夠分配的最大活動連接的數量,如果設置為非正數則表示不限制
maxActive=3
# 借出連接時不要測試,否則很影響性能  
testOnBorrow=false
# 指明連接是否被空閑連接回收器(如果有)進行檢驗.如果檢測失敗,則連接將被從池中去除.  
testWhileIdle=true
# 每X秒運行一次空閑連接回收器
timeBetweenEvictionRunsMillis=30000
# 在校驗線程完成校驗時會移除被遺漏的鏈接
removeAbandonedOnMaintenance=true
# 查詢校驗
validationQuery=SELECT 1

-----------------------------

DBCP連接池的自我檢測

-----------------------------

默認配置的DBCP連接池,是不對池中的連接做測試的,有時連接已斷開了,但DBCP連接池不知道,還以為連接是好的呢。

應用從池中取出這樣的連接訪問數據庫一定會報錯。這也是好多人不喜歡DBCP的原因。

 

問題例一:

MySQL8小時問題,Mysql服務器默認連接的“wait_timeout”是8小時,也就是說一個connection空閑超過8個小時,Mysql將自動斷開該 connection。

但是DBCP連接池并不知道連接已經斷開了,如果程序正巧使用到這個已經斷開的連接,程序就會報錯誤。

 

問題例二:

    以前還使用Sybase數據庫,由于某種原因,數據庫死了后重啟、或斷網后恢復。

    等了約10分鐘后,DBCP連接池中的連接還都是不能使用的(斷開的),訪問數據應用一直報錯,最后只能重啟Tomcat問題才解決 。

 

解決方案:

    方案1、定時對連接做測試,測試失敗就關閉連接。

    方案2、控制連接的空閑時間達到N分鐘,就關閉連接,(然后可再新建連接)。

    以上兩個方案使用任意一個就可以解決以述兩類問題。如果只使用方案2,建議 N <= 5分鐘。連接斷開后最多5分鐘后可恢復。

    也可混合使用兩個方案,建議 N = 30分鐘。

    

    下面就是DBCP連接池,同時使用了以上兩個方案的配置配置

    validationQuery = "SELECT 1"  驗證連接是否可用,使用的SQL語句

    testWhileIdle = "true"      指明連接是否被空閑連接回收器(如果有)進行檢驗.如果檢測失敗,則連接將被從池中去除.

    testOnBorrow = "false"   借出連接時不要測試,否則很影響性能



-----------------------------

DBCP連接池配置參數注意事項   

-----------------------------

maxIdle值與maxActive值應配置的接近。

因為,當連接數超過maxIdle值后,剛剛使用完的連接(剛剛空閑下來)會立即被銷毀。而不是我想要的空閑M秒后再銷毀起一個緩沖作用。這一點DBCP做的可能與你想像的不一樣。

若maxIdle應與maxActive相差較大,在高負載的系統中會導致頻繁的創建、銷毀連接,連接數在maxIdle與maxActive間快速頻繁波動,這不是我想要的。

高負載的系統的maxIdle值可以設置為與maxActive相同或設置為-1(-1表示不限制),讓連接數量在minIdle與maxIdle間緩沖慢速波動。

 

timeBetweenEvictionRunsMillis建議設置值

initialSize="5",會在tomcat一啟動時,創建5條連接,效果很理想。

但同時我們還配置了minIdle="10",也就是說,最少要保持10條連接,那現在只有5條連接,哪什么時候再創建少的5條連接呢?

1、等業務壓力上來了, DBCP就會創建新的連接。

2、配置timeBetweenEvictionRunsMillis=“時間”,DBCP會啟用獨立的工作線程定時檢查,補上少的5條連接。銷毀多余的連接也是同理。


------------------------------

連接銷毀的邏輯

------------------------------

DBCP的連接數會在  0 - minIdle - maxIdle - maxActive  之間變化。變化的邏輯描述如下:

 

默認未配置initialSize(默認值是0)和timeBetweenEvictionRunsMillis參數時,剛啟動tomcat時,連接數是0。當應用有一個并發訪問數據庫時DBCP創建一個連接。

目前連接數量還未達到minIdle,但DBCP也不自動創建新連接已使數量達到minIdle數量(沒有一個獨立的工作線程來檢查和創建)。

隨著應用并發訪問數據庫的增多,連接數也增多,但都與minIdle值無關,很快minIdle被超越,minIdle值一點用都沒有。

直到連接的數量達到maxIdle值,這時的連接都是只增不減的。 再繼續發展,連接數再增多并超過maxIdle時,使用完的連接(剛剛空閑下來的)會立即關閉,總體連接的數量穩定在maxIdle但不會超過maxIdle。

但活動連接(在使用中的連接)可能數量上瞬間超過maxIdle,但永遠不會超過maxActive。

這時如果應用業務壓力小了,訪問數據庫的并發少了,連接數也不會減少(沒有一個獨立的線程來檢查和銷毀),將保持在maxIdle的數量。

默認未配置initialSize(默認值是0),但配置了timeBetweenEvictionRunsMillis=“30000”(30秒)參數時,剛啟動tomcat時,連接數是0。馬上應用有一個并發訪問數據庫時DBCP創建一個連接。

目前連接數量還未達到minIdle,每30秒DBCP的工作線程檢查連接數是否少于minIdle數量,若少于就創建新連接直到達到minIdle數量。

隨著應用并發訪問數據庫的增多,連接數也增多,直到達到maxIdle值。這期間每30秒DBCP的工作線程檢查連接是否空閑了30分鐘,若是就銷毀。但此時是業務的高峰期,是不會有長達30分鐘的空閑連接的,工作線程查了也是白查,但它在工作。到這里連接數量一直是呈現增長的趨勢。

當連接數再增多超過maxIdle時,使用完的連接(剛剛空閑下來)會立即關閉,總體連接的數量穩定在maxIdle。停止了增長的趨勢。但活動連接(在使用中的連接)可能數量上瞬間超過maxIdle,但永遠不會超過maxActive。

這時如果應用業務壓力小了,訪問數據庫的并發少了,每30秒DBCP的工作線程檢查連接(默認每次查3條)是否空閑達到30分鐘(這是默認值),若連接空閑達到30分鐘,就銷毀連接。這時連接數減少了,呈下降趨勢,將從maxIdle走向minIdle。當小于minIdle值時,則DBCP創建新連接已使數量穩定在minIdle,并進行著新老更替。

配置initialSize=“10”時,tomcat一啟動就創建10條連接。其它同上。

minIdle要與timeBetweenEvictionRunsMillis配合使用才有用,單獨使用minIdle不會起作用。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平谷区| 临夏市| 白玉县| 招远市| 沾益县| 泽库县| 精河县| 呼图壁县| 梁山县| 利川市| 诏安县| 涞水县| 漠河县| 囊谦县| 沈丘县| 锦州市| 兴宁市| 赣州市| 江口县| 龙井市| 宽甸| 屏南县| 民县| 白朗县| 邢台市| 抚州市| 富川| 阜康市| 锡林浩特市| 朝阳市| 巴彦淖尔市| 监利县| 凤凰县| 陆良县| 天等县| 东兴市| 郁南县| 鱼台县| 武义县| 都昌县| 康乐县|