日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

数据库连接池优化配置(druid,dbcp,c3p0)

發(fā)布時(shí)間:2025/3/15 数据库 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据库连接池优化配置(druid,dbcp,c3p0) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?主要描述了數(shù)據(jù)庫連接池參數(shù)配置的準(zhǔn)則,針對常用的數(shù)據(jù)庫連接池(c3p0,dbcp,druid)給出推薦的配置。

考慮因素

? ? ? ? 1:當(dāng)前連接DB的規(guī)模 ? 2:并發(fā)情況 3:執(zhí)行db的響應(yīng)時(shí)間

配置考慮???

? ? ? ?1:初始化連接:可考慮設(shè)置為3個(gè)連接 。對于db規(guī)模特別大的情況下可考慮設(shè)置為1個(gè)。避免啟動(dòng)時(shí)間過長;

? ? ? ?2:最小連接:可考慮該值的設(shè)置和初始化連接保持一致;

? ? ? ?3:最大連接:對于有較大DB規(guī)模,最大連接不要設(shè)置過大,避免本地維護(hù)的db太大。 如果對應(yīng)到數(shù)據(jù)源的并發(fā)數(shù)過高,可考慮增大最大連接數(shù)。

? ? ? ?4:獲取連接的超時(shí)時(shí)間:如果連接全部被占用,需要等待的時(shí)間。可以根據(jù)當(dāng)前系統(tǒng)的響應(yīng)時(shí)間判定,如果容忍度較高,可以大點(diǎn)。容忍度較低,設(shè)置小點(diǎn)。

? ? ? ?5:當(dāng)獲取連接和釋放連接心跳檢測:建議全部關(guān)閉,否則每個(gè)數(shù)據(jù)庫訪問指令會(huì)對數(shù)據(jù)庫生產(chǎn)額外的兩條心跳檢測的指令,增加數(shù)據(jù)庫的負(fù)載。連接有效性的檢查改用后臺空閑連接檢查。

? ? ? ?6:連接有效性檢測時(shí)間:該值需要結(jié)合數(shù)據(jù)庫的wait_timeout,interactive_timeout值進(jìn)行設(shè)置。假如數(shù)據(jù)庫為120s,則心跳檢測時(shí)間在120s以內(nèi)越大越好。如果太小,心跳檢測時(shí)間會(huì)比較頻繁。建議設(shè)置為90s。

? ? ? ?7:最大空閑時(shí)間:如果連接超過該時(shí)間沒有使用過,則會(huì)進(jìn)行close掉。 該值不要太小,避免頻繁的建立連接關(guān)閉連接。也不要太大,導(dǎo)致一直無法關(guān)閉。

? ? ? ?8:心跳檢查的sql語句:盡量使用ping命令,ping的性能較查詢語句高。大部分的數(shù)據(jù)庫連接池不配置query語句,便會(huì)調(diào)用ping命令。

? ? ? ?9:prepareStatement緩存:可以根據(jù)自己的業(yè)務(wù)來判定是否開啟。開啟后對性能的影響依賴于具體業(yè)務(wù)和并發(fā)情況。可考慮暫時(shí)不開啟。

? ? ? ?10:連接使用超時(shí):業(yè)務(wù)拿到一個(gè)連接,如果超過指定的時(shí)間未歸還,是否把該連接給給回收掉。超時(shí)時(shí)間等和具體的業(yè)務(wù)關(guān)聯(lián)。暫時(shí)建議先不開啟。

下面主要給出:druid,dbcp,c3p0 三種連接池的推薦配置

druid配置

?介紹:https://github.com/alibaba/druid

?推薦配置:

initialSize3初始化配置
minIdle3最小連接數(shù)
maxActive15最大連接數(shù)
maxWait5000獲取連接超時(shí)時(shí)間(單位:ms)
timeBetweenEvictionRunsMillis90000連接有效性檢測時(shí)間(單位:ms)
testOnBorrow?false獲取連接檢測
testOnReturn?false歸還連接檢測
minEvictableIdleTimeMillis1800000最大空閑時(shí)間(單位ms)
testWhileIdletrue在獲取連接后,確定是否要進(jìn)行連接空間時(shí)間的檢查

配置說明:

? ? ? ? ? ?1:minEvictableIdleTimeMillis(最大空閑時(shí)間):默認(rèn)為30分鐘,配置里面不進(jìn)行設(shè)置。

? ? ? ? ? ?2:testOnBorrow ,testOnReturn 默認(rèn)為關(guān)閉,可以設(shè)置為不配置。

? ? ? ? ? ?3:testWhileIdle(在獲取連接后,確定是否要進(jìn)行連接空閑時(shí)間的檢查)。默認(rèn)為true。配置里面不再進(jìn)行設(shè)置。

流程說明:

? ? ? ? ? 1:在第一次調(diào)用connection的時(shí)候,才會(huì)進(jìn)行 initialSize的初始化。

? ? ? ? ? 2:心跳檢測時(shí)間線程,會(huì)休眠timeBetweenEvictionRunsMillis時(shí)間,然后只對(沒有borrow的線程 減去 minIdle)的線程進(jìn)行檢查,如果空閑時(shí)間大于minEvictableIdleTimeMillis則進(jìn)行close。

? ? ? ? ? 3:testWhileIdle必須設(shè)置為true,在獲取到連接后,先檢查testOnBorrow,然后再判定testwhileIdle,如果連接空閑時(shí)間大于timeBetweenEvictionRunsMillis,則會(huì)進(jìn)行心跳檢測。

? ? ? ? ? 4:不需要配置validationQuery,如果不配置的情況下會(huì)走ping命令,性能更高。

? ? ? ? ? 5:連接保存在數(shù)組里面,獲取連接的時(shí)候,獲取數(shù)組的最后一位。在timeBetweenEvictionRunsMillis時(shí)是從前往后進(jìn)行檢查連接的有效性。

dbcp配置

?介紹:http://commons.apache.org/proper/commons-dbcp/configuration.html

?推薦配置:

參數(shù)配置說明
initialSize3初始化配置
minIdle3最小連接數(shù)
maxIdle15最大空閑連接
maxTotal 15最大連接數(shù)
maxWaitMillis5000獲取連接超時(shí)時(shí)間(單位ms)
timeBetweenEvictionRunsMillis90000心跳檢測時(shí)間(單位ms)
minEvictableIdleTimeMillis1800000最大空閑時(shí)間(單位ms)
testOnBorrowFALSE獲取連接檢測
testOnReturnFALSE歸還連接檢測
numTestsPerEvictionRun-1空閑連接檢查的個(gè)數(shù)
testWhileIdleTRUE是否開啟對空閑連接的檢查

?配置說明:

? ? ?? ? 1:關(guān)于maxidle和maxTotal盡量保持一致。

? ? ? ? ?2:numTestsPerEvictionRun 設(shè)置為-1,代表對所有的連接均進(jìn)行檢查。默認(rèn)值為3。-1代表對全部idle的連接檢查有效性。 否則有可能造成部分連接的有效性未進(jìn)行檢查。

? ? ? ? ?3:testWhileIdle 也必須為true,代表需要檢查有效性。

? ? ? ? ?4:minEvictableIdleTimeMillis默認(rèn)值為30分鐘,可以不用進(jìn)行設(shè)置。

? ? ? ? 5:testOnReturn默認(rèn)值為false,可以不用設(shè)置。但是testOnBorrow必須進(jìn)行設(shè)置為false,默認(rèn)值為true。

? ? ? ? 6:validationQuery不配置默認(rèn)走ping命令

? ? ? ??

?流程說明:

? ? ?1:在第一次調(diào)用connection的時(shí)候,才會(huì)進(jìn)行 initialSize的初始化。

? ???2:不需要配置validationQuery,如果不配置的情況下會(huì)走ping命令,性能更高。

? ? ?3:連接保存在LinkedBlockingDeque 中。來做并發(fā)的控制。

? ? ?4:后端會(huì)有一個(gè)定時(shí)任務(wù),間隔為timeBetweenEvictionRunsMillis,先確定需要對多少線程進(jìn)行檢測(numTestsPerEvictionRun控制),然后判定是否超過minEvictableIdleTimeMillis,如果超過則close掉。沒有超過,則判定testWhileIdle為true的話,進(jìn)行心跳檢查。如果檢查失敗則關(guān)閉連接。

? ? ?5:在return連接的時(shí)候會(huì)判定maxIdle,如果當(dāng)前空閑連接是否大于maxIdle,則會(huì)關(guān)閉掉連接。

c3p0配置

??介紹:?http://www.mchange.com/projects/c3p0/

??推薦配置:

參數(shù)推薦值說明
initialPoolSize3初始化配置
minPoolSize3最小連接數(shù)
maxPoolSize15最大連接數(shù)
acquireIncrement1每次獲取的個(gè)數(shù)
checkoutTimeout5000獲取連接超時(shí)時(shí)間(單位ms)
idleConnectionTestPeriod90心跳檢測時(shí)間(單位 s)
maxIdleTime1800最大空閑時(shí)間(單位 s)
testConnectionOnCheckoutFALSE獲取連接檢測
testConnectionOnCheckinFALSE歸還連接檢測
numHelperThreads 1?

?配置說明:

? ? ??? ?1:testConnectionOnCheckout和testConnectionOnCheckin默認(rèn)為false,可不用配置

? ? ? ? 2:preferredTestQuery不用配置,默認(rèn)走ping命令。

? ? ? ? 3:numHelperThreads 默認(rèn)是開啟3個(gè)線程。如果數(shù)據(jù)源較多,這里會(huì)存在較多線程。 這里設(shè)置為1,避免線程較多的情況。

??流程說明:

? ? ? 1:在第一次調(diào)用connection的時(shí)候,才會(huì)進(jìn)行?initialPoolSize的初始化。

? ? ? 2:在進(jìn)行心跳檢測的時(shí)候,會(huì)對所有的空閑連接進(jìn)行心跳檢測。如果發(fā)現(xiàn)總連接小于最小連接數(shù),則會(huì)創(chuàng)建連接,保持最小的連接數(shù)。

?

?

原文鏈接:https://blog.csdn.net/hetaohappy/article/details/51861015

轉(zhuǎn)載于:https://www.cnblogs.com/oycyqr/p/9509424.html

總結(jié)

以上是生活随笔為你收集整理的数据库连接池优化配置(druid,dbcp,c3p0)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。