`
hetaohappyqqqq
  • 浏览: 5790 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

数据库连接池性能比对

阅读更多

背景

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

NOTE: 本文所有测试均是mysql库

测试结论

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

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

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

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

功能对比

功能 dbcp druid c3p0 tomcat-jdbc HikariCP
是否支持PSCache
监控 jmx jmx/log/http jmx,log jmx jmx
扩展性
sql拦截及解析 支持
代码 简单 中等 复杂 简单 简单
更新时间 2015.8.6 2015.10.10  2015.12.09   2015.12.3
特点 依赖于common-pool 阿里开源,功能全面 历史久远,代码逻辑复杂,且不易维护   优化力度大,功能简单,起源于boneCP
连接池管理 LinkedBlockingDeque 数组   FairBlockingQueue threadlocal+CopyOnWriteArrayList
  •  由于boneCP被hikariCP替代,并且已经不再更新,boneCP没有进行调研。
  • proxool网上有评测说在并发较高的情况下会出错,proxool便没有进行调研。
  •  druid的功能比较全面,且扩展性较好,比较方便对jdbc接口进行监控跟踪等。
  • c3p0历史悠久,代码及其复杂,不利于维护。并且存在deadlock的潜在风险。

性能测试

环境配置:

CPU Intel(R) Xeon(R) CPU E5-2430 v2 @ 2.50GHz,24core
msyql version 5.5.46
tomcat-jdbc version 8.0.28
HikariCP version 2.4.3
c3p0 Version 0.9.5-pre8
dbcpVersion 2.0.1
druidVersion 1.0.5

 

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

       测试说明:

  • 初始连接和最小连接均为5,最大连接为20。在borrow和return均不心跳检测
  • 其中打开关闭次数为: 100w次
  • 测试用例和mysql在同一台机器上面,尽量避免io的影响
  • 使用mock和连接mysql在不同线程并发下的响应时间

     图形:

 

 

   mock性能数据 (单位:ms)

  5 20 50 100
tomcat-jdbc 442 447 1,013 1,264
c3p0 4,480 5,527 7,449 10,725
dbcp 676 689 867 1,292
hikari 38 33 38 30
druid 291 293 562 985

mysql性能数据 (单位:ms)

  5 20 50 100
tomcat-jdbc 436 453 1,033 1,291
c3p0 4,378 5,726 7,975 10,948
dbcp 671 679 897 1,380
hikari 96 82 87 78
druid 304 424 690 1,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的影响

图形:

   

 测试数据:

  5 8 20 50 100
tomcat-jdbc 2,178 1,495 1,769 1,818 1,858
c3p0 3,237 3,451 4,488 5,994 7,906
dbcp 2,816 1,935 2,097 2,243 2,280
hikari 2,299 1,546 1,682 1,751 1,772
druid 2,297 1,551 1,800 1,977 2,032

 

测试结果:

  •   在并发比较少的情况下,每个连接池的响应时间差不多。是由于并发少,基本上没有资源竞争。
  •   在并发较高的情况下,随着并发的升高,hikariCP响应时间基本上没有变动。
  •   c3p0随着并发的提高,性能急剧下降。

 

3:pscache性能对比

   测试说明:

  • 通过druid进行设置pscache和不设置pscache的性能对比
  • 初始连接和最小连接均为8,最大连接为8。在borrow和return均不心跳检测。并且执行的并发数为8.
  • 查询10w次。查询流程为:1:建立连接,2:循环查询preparestatement语句 3:close连接
  • 测试用例和mysql在同一台机器上面,尽量避免io的影响

   测试数据:

cache 1,927
not cache 2,134

  测试结果:

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

  测试说明:

  • psCache是connection私有的,所以不存在线程竞争的问题,开启pscache不会存在竞争的性能损耗。
  • psCache的key为prepare执行的sql和catalog等,value对应的为prepareStatement对象。开启缓存主要是减少了解析sql的开销。
分享到:
评论

相关推荐

    QT 支持多客户端链接TCP服务器,外带数据库连接池

    在“QT支持多客户端链接TCP服务器,外带数据库连接池”这个项目中,我们将探讨如何利用QT库构建一个能同时处理多个客户端连接的TCP服务器,并有效地管理数据库连接。 首先,我们要构建TCP服务器,这主要依赖于QT的...

    易语言-易语言多线程同时查询同一数据库对比

    2. **数据库连接池**:为优化性能,可以考虑使用数据库连接池,复用已建立的连接,减少频繁的连接创建和销毁。 3. **事务管理**:对于需要保证原子性的操作,应使用事务进行管理,确保在多线程环境下数据操作的完整...

    通用的数据库迁移适配方法及系统的制作方法.pdf

    3. **迁移适配**:通过将模板池中的源数据库规则与目标数据库进行比对,找出两者之间的不匹配之处,确保源数据库的功能能在目标数据库上正确执行。 4. **适配结果输出**:输出适配过程中遇到的问题,帮助研发人员...

    Python更新数据库脚本两种方法及对比介绍

    # 数据库连接池的大小。默认是数据库引擎的默认值(通常是5)。 app.config['SQLALCHEMY_POOL_SIZE'] = 6 db = SQLAlchemy(app) class Table_one(db.Model): __tablename__ = 'table_one' id = db.Column('id', ...

    jsp+servlet+bean编写的登入界面

    数据库连接池也可能被用到,以优化资源管理,提高应用程序的性能。 **流程**: 1. 用户在JSP页面上输入用户名和密码,点击登录按钮。 2. JSP页面将这些信息发送到对应的Servlet。 3. Servlet接收到请求后,通过JDBC...

    招投标系统源码2021.zip 服务器应用 - Web服务器.zip

    考虑到招投标系统可能面临大量并发请求,源码可能实现了负载均衡、缓存策略、数据库连接池等来优化性能。同时,系统设计应具备良好的可扩展性,方便未来添加新功能或对接其他系统。 **7. 日志与监控** 为了追踪系统...

    信息管理系统需求文档1

    - 性能优化:为了提高系统的运行效率,需要优化数据库连接设计,例如,采用合理的连接池策略,减少数据库连接的创建与销毁次数。 - 界面设计:系统应具备用户友好的界面,如登录界面、信息面板等,提供清晰的操作...

    springmvc+mybatis整合登录增删改查分页

    4. 以及日志框架、数据库连接池等其他辅助性jar包。 在配置文件方面,主要是web.xml和Spring的配置文件。web.xml文件中配置了Spring MVC的DispatcherServlet,它负责将请求分发到对应的Controller,同时还包括了...

    Spring Boot整合redis

    Druid是阿里巴巴开源的数据库连接池组件,提供了监控、连接池管理等功能。在`pom.xml`或`build.gradle`中添加Druid依赖,然后在配置类中配置DruidDataSource: ```java @Configuration public class DruidConfig { ...

    通过分析SQL语句的执行计划优化SQL.doc

    在数据库管理中,SQL语句的优化是提升系统性能的关键环节。本文主要探讨了如何通过分析SQL语句的执行计划来优化查询性能,涉及到共享SQL语句、ROWID、Recursive SQL、Row Source、Driving Table和Probed Table等相关...

    用servlet写的简单的登录注册没写过滤器

    假设我们使用了JDBC(Java Database Connectivity)来连接数据库,我们需要配置数据库连接池,比如C3P0或HikariCP,以提高性能和管理数据库资源。 接着,创建一个`RegisterServlet`,处理用户注册请求。注册通常...

    ASE-Oracle-Migration-Guide-112108-wp.pdf

    3. **逻辑架构验证**:比对数据库模式、数据类型、索引结构等,确保与源数据库的一致性。 4. **数据验证**:执行数据完整性检查,如主键约束、外键引用、唯一性约束等。 5. **功能性验证**:测试数据库功能,如...

    Java在线考试系统+论文材料

    7. **并发处理**:在线考试系统需要处理大量并发用户,因此需要考虑线程安全和性能优化,如使用连接池、缓存技术等。 8. **异常处理与日志记录**:完善的异常处理机制和日志记录有助于调试和监控系统运行状态,确保...

    基于大数据的智慧校园服务平台构建.pdf

    构建智慧校园服务平台的过程中涉及到多个关键技术和方法,包括智慧校园服务平台通讯网络的连接、服务器资源池的建立以及数据的处理和检索等。 在构建智慧校园服务平台通讯网络时,需要考虑网络的稳定性和高效性,...

    vSphere 故障排除

    - **检查数据库连接:** 确认 vCenter Server 能够成功连接到数据库。 2. **vSphere Web Client 故障排除:** - **审查浏览器兼容性:** 确认使用的浏览器版本与 vSphere Web Client 兼容。 - **清除缓存:** ...

Global site tag (gtag.js) - Google Analytics