数据库连接池性能比对(hikari druid c3p0 dbcp jdbc)

背景

对现有的数据库连接池做调研对比,综合性能,可靠性,稳定性,扩展性等因素选出推荐出最优的数据库连接池 。

NOTE: 本文所有测试均是MySQL

测试结论

   1:性能方面 hikariCP>druid>tomcat-jdbc>dbcp>c3p0 。hikariCP的高性能得益于最大限度的避免锁竞争。

   2:druid功能最为全面,sql拦截等功能,统计数据较为全面,具有良好的扩展性。

   3:综合性能,扩展性等方面,可考虑使用druid或者hikariCP连接池。

   4:可开启prepareStatement缓存,对性能会有大概20%的提升。

功能对比

功能dbcpdruidc3p0tomcat-jdbcHikariCP

是否支持PSCache是是是否否

监控jmxjmx/log/httpjmx,logjmxjmx

扩展性弱好弱弱弱

sql拦截及解析无支持无无无

代码简单中等复杂简单简单

更新时间2015.8.62015.10.10 2015.12.09 2015.12.3

特点依赖于common-pool阿里开源,功能全面历史久远,代码逻辑复杂,且不易维护 优化力度大,功能简单,起源于boneCP

连接池管理LinkedBlockingDeque数组 FairBlockingQueuethreadlocal+CopyOnWriteArrayList

 由于boneCP被hikariCP替代,并且已经不再更新,boneCP没有进行调研。

proxool网上有评测说在并发较高的情况下会出错,proxool便没有进行调研。

 druid的功能比较全面,且扩展性较好,比较方便对jdbc接口进行监控跟踪等。

c3p0历史悠久,代码及其复杂,不利于维护。并且存在deadlock的潜在风险。

性能测试

环境配置:

CPUIntel(R) Xeon(R) CPU E5-2430 v2 @ 2.50GHz,24core

msyql version5.5.46

tomcat-jdbc version8.0.28

HikariCP version2.4.3

c3p0 Version0.9.5-pre8

dbcpVersion2.0.1

druidVersion1.0.5


1:获取关闭连接性能测试

       测试说明:

初始连接和最小连接均为5,最大连接为20。在borrow和return均不心跳检测

其中打开关闭次数为: 100w次

测试用例和mysql在同一台机器上面,尽量避免io的影响

使用mock和连接mysql在不同线程并发下的响应时间

     图形:

环境配置:

CPUIntel(R) Xeon(R) CPU E5-2430 v2 @ 2.50GHz,24core

msyql version5.5.46

tomcat-jdbc version8.0.28

HikariCP version2.4.3

c3p0 Version0.9.5-pre8

dbcpVersion2.0.1

druidVersion1.0.5


1:获取关闭连接性能测试

       测试说明:

初始连接和最小连接均为5,最大连接为20。在borrow和return均不心跳检测

其中打开关闭次数为: 100w次

测试用例和mysql在同一台机器上面,尽量避免io的影响

使用mock和连接mysql在不同线程并发下的响应时间

     图形:

mock性能数据 (单位:ms)

 52050100

tomcat-jdbc4424471,0131,264

c3p04,4805,5277,44910,725

dbcp6766898671,292

hikari38333830

druid291293562985

mysql性能数据 (单位:ms)

 52050100

tomcat-jdbc4364531,0331,291

c3p04,3785,7267,97510,948

dbcp6716798971,380

hikari96828778

druid3044246901,130

测试结果:

mock和mysql连接性能表现差不多,主要是由于初始化的时候建立了连接后期不再建立连接,和使用mock连接逻辑一致。 

性能表现:hikariCP>druid>tomcat-jdbc>dbcp>c3p0。

 hikariCP 的性能及其优异。hikariCP号称java平台最快的数据库连接池。

 hikariCP在并发较高的情况下,性能基本上没有下降。

c3p0连接池的性能很差,不建议使用该数据库连接池。

   hikariCP性能分析:

hikariCP通过优化(concurrentBag,fastStatementList )集合来提高并发的读写效率。

hikariCP使用threadlocal缓存连接及大量使用CAS的机制,最大限度的避免lock。单可能带来cpu使用率的上升。

从字节码的维度优化代码。 (default inline threshold for a JVM running the server Hotspot compiler is 35 bytecodes )让方法尽量在35个字节码一下,来提升jvm的处理效率。


2:查询一条语句性能测试

     测试说明:

初始连接和最小连接均为8,最大连接为8。在borrow和return均不心跳检测

查询的次数为10w次,查询的语句为 1:打开连接 2:执行 :select 1 3:关闭连接

测试用例和mysql在同一台机器上面,尽量避免io的影响

图形:



测试结果:

  在并发比较少的情况下,每个连接池的响应时间差不多。是由于并发少,基本上没有资源竞争。

  在并发较高的情况下,随着并发的升高,hikariCP响应时间基本上没有变动。

  c3p0随着并发的提高,性能急剧下降。

 

3:pscache性能对比

   测试说明:

通过druid进行设置pscache和不设置pscache的性能对比

初始连接和最小连接均为8,最大连接为8。在borrow和return均不心跳检测。并且执行的并发数为8.

查询10w次。查询流程为:1:建立连接,2:循环查询preparestatement语句 3:close连接

测试用例和mysql在同一台机器上面,尽量避免io的影响

   测试数据:

cache1,927

not cache2,134

  测试结果:

开启psCache缓存,性能大概有20%幅度的提升。可考虑开启pscache.

  测试说明:

psCache是connection私有的,所以不存在线程竞争的问题,开启pscache不会存在竞争的性能损耗。

psCache的key为prepare执行的sql和catalog等,value对应的为prepareStatement对象。开启缓存主要是减少了解析sql的开销。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,635评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,628评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,971评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,986评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,006评论 6 394
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,784评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,475评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,364评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,860评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,008评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,152评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,829评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,490评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,035评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,428评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,127评论 2 356