数据库连接池性能比对(hikari druid c3p0 dbcp jdbc)
来源:互联网 发布:c语言韩信点兵题目 编辑:程序博客网 时间:2024/04/28 10:24
背景
对现有的数据库连接池做调研对比,综合性能,可靠性,稳定性,扩展性等因素选出推荐出最优的数据库连接池 。
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,24coremsyql version5.5.46tomcat-jdbc version8.0.28HikariCP version2.4.3c3p0 Version0.9.5-pre8dbcpVersion2.0.1druidVersion1.0.5
1:获取关闭连接性能测试
测试说明:
- 初始连接和最小连接均为5,最大连接为20。在borrow和return均不心跳检测
- 其中打开关闭次数为: 100w次
- 测试用例和mysql在同一台机器上面,尽量避免io的影响
- 使用mock和连接mysql在不同线程并发下的响应时间
图形:
mock性能数据 (单位:ms)
52050100tomcat-jdbc4424471,0131,264c3p04,4805,5277,44910,725dbcp6766898671,292hikari38333830druid291293562985
MySQL性能数据 (单位:ms)
52050100tomcat-jdbc4364531,0331,291c3p04,3785,7267,97510,948dbcp6716798971,380hikari96828778druid3044246901,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的影响
图形:
测试数据:
582050100tomcat-jdbc2,1781,4951,7691,8181,858c3p03,2373,4514,4885,9947,906dbcp2,8161,9352,0972,2432,280hikari2,2991,5461,6821,7511,772druid2,2971,5511,8001,9772,032
测试结果:
- 在并发比较少的情况下,每个连接池的响应时间差不多。是由于并发少,基本上没有资源竞争。
- 在并发较高的情况下,随着并发的升高,hikariCP响应时间基本上没有变动。
- c3p0随着并发的提高,性能急剧下降。
3:pscache性能对比
测试说明:
- 通过druid进行设置pscache和不设置pscache的性能对比
- 初始连接和最小连接均为8,最大连接为8。在borrow和return均不心跳检测。并且执行的并发数为8.
- 查询10w次。查询流程为:1:建立连接,2:循环查询preparestatement语句 3:close连接
- 测试用例和mysql在同一台机器上面,尽量避免io的影响
测试数据:
cache1,927not cache2,134
测试结果:
- 开启psCache缓存,性能大概有20%幅度的提升。可考虑开启pscache.
测试说明:
- psCache是connection私有的,所以不存在线程竞争的问题,开启pscache不会存在竞争的性能损耗。
- psCache的key为prepare执行的sql和catalog等,value对应的为prepareStatement对象。开启缓存主要是减少了解析sql的开销。
1 0
- 数据库连接池性能比对(hikari druid c3p0 dbcp jdbc)
- 数据库连接池性能比对(hikari druid c3p0 dbcp jdbc)
- 数据库连接池性能比对(hikari druid c3p0 dbcp jdbc)
- 数据库连接池性能比对(hikari druid c3p0 dbcp jdbc)
- 数据库连接池性能比对(hikari druid c3p0 dbcp jdbc)
- 数据库连接池性能比对(hikari druid c3p0 dbcp jdbc)
- 数据库连接池性能比对(hikari druid c3p0 dbcp jdbc)
- 数据库连接池性能比对(hikari druid c3p0 dbcp jdbc)
- 数据库连接池性能比对(hikari druid c3p0 dbcp jdbc)
- 数据库连接池性能比对(hikari druid c3p0 dbcp jdbc)
- 数据库连接池性能比对(hikari druid c3p0 dbcp jdbc)
- 数据库连接池性能横向比对(hikari druid c3p0 dbcp jdbc)
- HikariCP VS druid VS c3p0 VS dbcp VS jdbc 数据库连接池性能比对
- JDBC 数据库连接池 -Dbcp -C3p0
- 数据库连接池优化配置(druid,dbcp,c3p0)
- 数据库连接池 DBCP、C3P0、Druid 连接代码
- 数据库连接池优化配置(druid,dbcp,c3p0)
- dbcp,c3p0,druid数据库连接池的浅析
- VMware 与 Linux 共享文件
- JavaScript一道面试题求y的值是? z 的值是? s的值是?
- Java网络编程+多线程通信
- 三维游戏图形学学习笔记(一)基本光照模型
- 【MATLAB】添加自定义的模块到simulink库浏览器
- 数据库连接池性能比对(hikari druid c3p0 dbcp jdbc)
- 滤镜Filters的十种特殊效果
- Linux下如何使用jq解析json数据
- 网页与网站
- Java保留字_static
- 使用httpclient及jsoup从oj上抓取题目信息
- codeforces 559B Equivalent Strings (最小表示法)
- mac brew 遇到Another active Homebrew process问题
- CCF NOI1042 发奖学金