數(shù)據(jù)庫(kù)連接池性能測(cè)試(hikariCP,druid,tomcat-jdbc,dbcp,c3p0)

本文主要是對(duì)這hikariCP,druid,tomcat-jdbc,dbcp,c3p0幾種連接池的詳細(xì)的功能和性能測(cè)試對(duì)比,通過(guò)這次測(cè)試對(duì)目前主流的一些連接池做一個(gè)全面的對(duì)比,從而給業(yè)務(wù)系統(tǒng)一個(gè)最佳的推薦。

測(cè)試結(jié)論

1滑频、性能方面 hikariCP>druid>tomcat-jdbc>dbcp>c3p0 猴鲫。hikariCP的高性能得益于最大限度的避免鎖競(jìng)爭(zhēng)瘟斜。

2翁垂、druid功能最為全面莽使,sql攔截等功能绵跷,統(tǒng)計(jì)數(shù)據(jù)較為全面膘螟,具有良好的擴(kuò)展性。

3碾局、綜合考慮到目前venus已經(jīng)支持druid且hikariCP并未發(fā)現(xiàn)有太多大規(guī)模的生產(chǎn)實(shí)踐的案例荆残,后續(xù)將推薦使用druid并把codegen生成的代碼默認(rèn)連接池為druid。

4净当、可開啟prepareStatement緩存内斯,對(duì)性能會(huì)有大概10%的提升。

功能對(duì)比

線程的作用

1像啼、dbcp:一個(gè)線程:負(fù)責(zé)心跳猖闪,最小連接數(shù)維持肠缔,最大空閑時(shí)間和防連接泄露。

2、druid: 兩個(gè)線程: 其中一個(gè)負(fù)責(zé)異步創(chuàng)建祥诽。一個(gè)負(fù)責(zé)最小連接數(shù)的維持。 其中心跳是通過(guò)獲取連接,來(lái)判定是否小于心跳間隔。

3蝗碎、hikariCP: 三個(gè)線程: 其中一個(gè)為定時(shí)線程,解決最大空閑時(shí)間旗扑。兩個(gè)為新建連接和關(guān)閉連接蹦骑。 均是連接池,空閑5s臀防,線程便會(huì)關(guān)閉脊串。

4、c3p0: 四個(gè)線程清钥;三個(gè)helperThread (pollerThread),一個(gè)定時(shí)AdminTaskTimer(DeadlockDetector)琼锋。

由于boneCP被hikariCP替代,并且已經(jīng)不再更新祟昭,boneCP沒有進(jìn)行調(diào)研缕坎。

proxool網(wǎng)上有評(píng)測(cè)說(shuō)在并發(fā)較高的情況下會(huì)出錯(cuò),proxool便沒有進(jìn)行調(diào)研篡悟。

druid的功能比較全面谜叹,且擴(kuò)展性較好,比較方便對(duì)jdbc接口進(jìn)行監(jiān)控跟蹤等搬葬。

c3p0歷史悠久荷腊,代碼及其復(fù)雜,不利于維護(hù)急凰。并且存在deadlock的潛在風(fēng)險(xiǎn)女仰。

國(guó)內(nèi)公司連接池使用情況


性能測(cè)試(網(wǎng)上查證的,沒有親測(cè))

1抡锈、環(huán)境配置:


2疾忍、獲取關(guān)閉連接性能測(cè)試

測(cè)試說(shuō)明如下:

初始連接和最小連接均為5,最大連接為20床三。在borrow和return均不心跳檢測(cè)

其中打開關(guān)閉次數(shù)為: 100w次

測(cè)試用例和mysql在同一臺(tái)機(jī)器上面一罩,盡量避免io的影響

使用mock和連接mysql在不同線程并發(fā)下的響應(yīng)時(shí)間

mock性能數(shù)據(jù) (單位:ms):



3、mysql性能數(shù)據(jù) (單位:ms)


測(cè)試結(jié)果:

1撇簿、mock和mysql連接性能表現(xiàn)差不多聂渊,主要是由于初始化的時(shí)候建立了連接后期不再建立連接,和使用mock連接邏輯一致四瘫。

2汉嗽、性能表現(xiàn):hikariCP>druid>tomcat-jdbc>dbcp>c3p0。

3莲组、hikariCP 的性能及其優(yōu)異诊胞。hikariCP號(hào)稱java平臺(tái)最快的數(shù)據(jù)庫(kù)連接池。

4、hikariCP在并發(fā)較高的情況下撵孤,性能基本上沒有下降迈着。

5、c3p0連接池的性能很差邪码,不建議使用該數(shù)據(jù)庫(kù)連接池裕菠。


hikariCP性能分析:

1、hikariCP通過(guò)優(yōu)化(concurrentBag闭专,fastStatementList )集合來(lái)提高并發(fā)的讀寫效率奴潘。

2、hikariCP使用threadlocal緩存連接及大量使用CAS的機(jī)制影钉,最大限度的避免lock画髓。單可能帶來(lái)cpu使用率的上升。

3平委、從字節(jié)碼的維度優(yōu)化代碼奈虾。 (default inline threshold for a JVM running the server Hotspot compiler is 35 bytecodes )讓方法盡量在35個(gè)字節(jié)碼一下,來(lái)提升jvm的處理效率廉赔。


查詢一條語(yǔ)句性能測(cè)試

測(cè)試說(shuō)明:

初始連接和最小連接均為8肉微,最大連接為8。在borrow和return均不心跳檢測(cè)

測(cè)試在不同并發(fā)下查詢的次數(shù)為10w次的總耗時(shí)對(duì)比蜡塌,操作步驟為 1:打開連接 2:執(zhí)行 :select 3. 關(guān)閉連接

測(cè)試用例和mysql在同一臺(tái)機(jī)器上面碉纳,盡量避免io的影響

測(cè)試數(shù)據(jù):

連接池5ms8ms20ms50ms100ms

tomcat-jdbc2,1781,4951,7691,8181,858

c3p03,2373,4514,4885,9947,906

dbcp2,8161,9352,0972,2432,280

hikari2,2991,5461,6821,7511,772

druid2,2971,5511,8001,9772,032

測(cè)試結(jié)果:

在并發(fā)比較少的情況下,每個(gè)連接池的響應(yīng)時(shí)間差不多馏艾。是由于并發(fā)少劳曹,基本上沒有資源競(jìng)爭(zhēng)。

在并發(fā)較高的情況下攒至,隨著并發(fā)的升高厚者,hikariCP響應(yīng)時(shí)間基本上沒有變動(dòng)躁劣。

c3p0隨著并發(fā)的提高迫吐,性能急劇下降。

pscache性能對(duì)比

測(cè)試說(shuō)明:

通過(guò)druid進(jìn)行設(shè)置pscache和不設(shè)置pscache的性能對(duì)比

初始連接和最小連接均為8账忘,最大連接為8志膀。在borrow和return均不心跳檢測(cè)。并且執(zhí)行的并發(fā)數(shù)為8.

查詢10w次鳖擒。查詢流程為:1:建立連接溉浙,2:循環(huán)查詢preparestatement語(yǔ)句 3:close連接

測(cè)試用例和mysql在同一臺(tái)機(jī)器上面,盡量避免io的影響

測(cè)試數(shù)據(jù):

cache1,927

not cache2,134

測(cè)試結(jié)果:

開啟psCache緩存,性能大概有10%幅度的提升蒋荚〈粱可考慮開啟pscache.

測(cè)試說(shuō)明:

psCache是connection私有的,所以不存在線程競(jìng)爭(zhēng)的問(wèn)題,開啟pscache不會(huì)存在競(jìng)爭(zhēng)的性能損耗惊奇。

psCache的key為prepare執(zhí)行的sql和catalog等互躬,value對(duì)應(yīng)的為prepareStatement對(duì)象。開啟緩存主要是減少了解析sql的開銷颂郎。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末吼渡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子乓序,更是在濱河造成了極大的恐慌寺酪,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,430評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件替劈,死亡現(xiàn)場(chǎng)離奇詭異寄雀,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)陨献,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門咙俩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人湿故,你說(shuō)我怎么就攤上這事阿趁。” “怎么了坛猪?”我有些...
    開封第一講書人閱讀 167,834評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵脖阵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我墅茉,道長(zhǎng)命黔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,543評(píng)論 1 296
  • 正文 為了忘掉前任就斤,我火速辦了婚禮悍募,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘洋机。我一直安慰自己坠宴,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評(píng)論 6 397
  • 文/花漫 我一把揭開白布绷旗。 她就那樣靜靜地躺著喜鼓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪衔肢。 梳的紋絲不亂的頭發(fā)上庄岖,一...
    開封第一講書人閱讀 52,196評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音角骤,去河邊找鬼隅忿。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的背桐。 我是一名探鬼主播刘陶,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼牢撼!你這毒婦竟也來(lái)了匙隔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,671評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤熏版,失蹤者是張志新(化名)和其女友劉穎纷责,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體撼短,經(jīng)...
    沈念sama閱讀 46,221評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡再膳,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了曲横。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片喂柒。...
    茶點(diǎn)故事閱讀 40,444評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖禾嫉,靈堂內(nèi)的尸體忽然破棺而出灾杰,到底是詐尸還是另有隱情,我是刑警寧澤熙参,帶...
    沈念sama閱讀 36,134評(píng)論 5 350
  • 正文 年R本政府宣布艳吠,位于F島的核電站,受9級(jí)特大地震影響孽椰,放射性物質(zhì)發(fā)生泄漏昭娩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評(píng)論 3 333
  • 文/蒙蒙 一黍匾、第九天 我趴在偏房一處隱蔽的房頂上張望栏渺。 院中可真熱鬧,春花似錦锐涯、人聲如沸磕诊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)秀仲。三九已至,卻和暖如春壶笼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背雁刷。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工覆劈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,837評(píng)論 3 376
  • 正文 我出身青樓责语,卻偏偏與公主長(zhǎng)得像炮障,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子坤候,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容