MYSQL系列数据库连接池:HikariCP介绍和使用

2023年 9月 28日 52.6k 0

HikariCP是一个高性能的Java连接池库,用于管理数据库连接。它专为高并发和低延迟的应用程序设计,提供了可靠、稳定且高效的连接池解决方案。
其是SpringBoot默认的数据库连接池

介绍

HikariCP是一个快速、高效和可靠的Java连接池库,适用于需要处理大量数据库操作的应用程序。它被广泛应用于各种Java项目,包括Web应用程序、大数据处理、微服务等
主要特点和优势如下:

  • 高性能:HikariCP通过有效地管理连接池、使用轻量级的数据结构和最小化的锁定机制,实现了卓越的性能。它具有低延迟和高吞吐量,适用于处理大量并发数据库操作的场景。
  • 资源效率:HikariCP在连接池管理方面非常高效。它采用了快速的连接获取和释放机制,以及优化的连接验证和闲置连接检测策略,减少了资源的消耗和浪费。
  • 配置简单:HikariCP提供了简洁而直观的配置选项,使得连接池的设置和调整变得容易。你可以通过一些基本的配置参数来优化连接池的大小、超时设置、连接验证等。
  • 自动管理:HikariCP内置了自动管理和维护连接池的功能。它能够自动检测并处理故障连接、超时连接和过期连接,确保连接池的稳定和可靠性。
  • 兼容性:HikariCP与各种数据库和框架兼容性良好,包括MySQL、PostgreSQL、Oracle、SQLite等。它可以与大多数常见的Java应用程序和持久化框架集成。
  • 官网地址:github.com/brettwooldr…

    可以在官网上看到性能对比:

    image.png

    • 一个连接周期定义为单个DataSource.getConnection()Connection.close()
    • 一个语句循环被定义为单个Connection.prepareStatement()Statement.execute()Statement.close()

    参数配置

    HikariCP 具有合理的默认设置,无需额外调整即可在大多数部署中表现良好。但有些必填项需要填写

    必填参数项

    参数项 说明 默认值
    dataSourceClassName 这是JDBC 驱动程序提供的类dataSourceClassName 的名称。DataSource请查阅特定 JDBC 驱动程序的文档以获取此类名称
    jdbcUrl 该属性指示 HikariCP 使用“基于 DriverManager”的配置。我们认为基于数据源的配置(上面)由于多种原因(见下文)更优越,但对于许多部署来说几乎没有显着差异。 当将此属性与“旧”驱动程序一起使用时,您可能还需要设置该 driverClassName属性,但首先尝试不设置该属性。 其与dataSourceClassName配置二选一
    username 连接用户名,该属性设置从底层驱动获取Connectionsusername 时使用的默认身份验证用户名。
    password 该属性设置从底层驱动获取Connectionspassword时使用的默认身份验证密码。

    经常使用参数

    参数项 说明 默认值
    autoCommit 此属性控制从池返回的连接的默认自动提交行为。它是一个布尔值。 true
    connectionTimeout 此属性控制客户端(即您)等待来自池的连接的最大毫秒数。如果超过此时间而没有可用连接,则会抛出 SQLException。可接受的最低连接超时为 250 毫秒。 30000(30 秒)
    idleTimeout 此属性控制允许连接在池中空闲的最长时间。 此设置仅在定义为小于 **时适用。minimumIdle``maximumPoolSize**一旦池达到 连接数,空闲连接就不会minimumIdle被收回。连接是否因空闲而退出,最大变化为 +30 秒,平均变化为 +15 秒。在此超时之前, 连接永远不会因空闲而退出。值 0 表示永远不会从池中删除空闲连接。允许的最小值为 10000 毫秒(10 秒) 600000(10 分钟)
    keepaliveTime 此属性控制 HikariCP 尝试保持连接活动的频率,以防止数据库或网络基础设施超时。该值必须小于该 maxLifetime值。“保持活动”只会发生在空闲连接上。当针对给定连接的“保持活动”时间到达时,该连接将从池中删除、“ping”,然后返回到池中。“ping”是以下之一:调用 JDBC4isValid()方法,或执行 connectionTestQuery。通常,池外的持续时间应以个位数毫秒甚至亚毫秒为单位进行测量,因此应该很少或没有明显的性能影响。允许的最小值为 30000 毫秒(30 秒),但分钟范围内的值是最理想的。 0(禁用)
    maxLifetime 该属性控制池中连接的最长生命周期。正在使用的连接永远不会退休,只有当它关闭时才会被删除。在逐个连接的基础上,应用较小的负衰减以避免池中的大规模灭绝。 我们强烈建议设置此值,它应该比任何数据库或基础设施施加的连接时间限制短几秒。  值 0 表示没有最大寿命(无限寿命),当然取决于设置idleTimeout。允许的最小值为 30000 毫秒(30 秒) 1800000(30 分钟)
    connectionTestQuery 如果您的驱动程序支持 JDBC4,我们强烈建议不要设置此属性。 这适用于不支持 JDBC4 的“旧版”驱动程序Connection.isValid() API。这是在从池中向您提供连接之前执行的查询,以验证与数据库的连接是否仍然有效。再次尝试在没有此属性的情况下运行池,如果您的驱动程序不兼容 JDBC4,HikariCP 将记录一条错误来通知您。
    minimumIdle 最小空闲连接数。 如果空闲连接低于此值并且池中的总连接数小于maximumPoolSize,HikariCP 将尽最大努力快速有效地添加额外连接。但是,为了获得最大性能和对高峰需求的响应能力,我们建议不要设置此值,而是允许 HikariCP 充当固定大小的连接池。 与 MaximumPoolSize 相同
    maximumPoolSize 此属性控制池允许达到的最大大小,包括空闲连接和正在使用的连接。基本上这个值将决定到数据库后端的实际连接的最大数量。合理的值最好由您的执行环境决定。connectionTimeout当池达到此大小并且没有可用的空闲连接时,对 getConnection() 的调用将在超时之前阻塞长达几毫秒。请阅读有关池大小的信息 10
    metricRegistry 此属性只能通过编程配置或 IoC 容器使用。此属性允许您指定池使用的Codahale/Dropwizard 实例来记录各种指标。MetricRegistry有关详细信息,请参阅Metrics wiki 页面。
    healthCheckRegistry 此属性只能通过编程配置或 IoC 容器使用。此属性允许您指定池使用的Codahale/Dropwizard 实例来报告当前运行状况信息。 有关详细信息, HealthCheckRegistry请参阅健康检查wiki 页面。
    poolName 该属性表示连接池的用户定义名称,主要出现在日志记录和 JMX 管理控制台中,用于标识池和池配置。 自动生成

    不长使用参数

    参考官网查看
    initializationFailTimeout
    isolateInternalQueries
    allowPoolSuspension
    readOnly
    registerMbeans
    catalog
    connectionInitSql
    driverClassName
    transactionIsolation
    validationTimeout
    leakDetectionThreshold
    dataSource
    schema
    threadFactory
    scheduledExecutor

    基于Spring Boot配置实例

    直接在之前sharding-jdbc分库分表修改,地址如下:github.com/hongyuwen/H…
    只要改动sharding-databases-tables.yaml文件:

    dataSources:
    #  ds_1:
    #    dataSourceClassName: com.alibaba.druid.pool.DruidDataSource
    #    driverClassName: com.mysql.jdbc.Driver
    #    url: jdbc:mysql://172.17.108.172:3306/point_shard1?autoReconnect=true&characterEncoding=UTF-8&useUnicode=true&connectTimeout=3000&socketTimeout=3000
    #    username: root
    #    password: -
      ds_1:
        dataSourceClassName: com.zaxxer.hikari.HikariDataSource
        driverClassName: com.mysql.jdbc.Driver
        jdbcUrl: jdbc:mysql://172.17.108.172:3306/point_shard1?autoReconnect=true&characterEncoding=UTF-8&useUnicode=true&connectTimeout=3000&socketTimeout=3000
        username: root
        password: -
        connectionTimeout: 3000
        idleTimeout: 600000
        keepaliveTime: 30000
        maxLifetime: 1800000
        minimumIdle: 10
        maximumPoolSize: 10
        poolName: ds_1
    

    启动打印日志如下

    2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|HikariPool-2 - configuration:|com.zaxxer.hikari.HikariConfig
    2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|allowPoolSuspension................................false|com.zaxxer.hikari.HikariConfig
    2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|autoCommit................................true|com.zaxxer.hikari.HikariConfig
    2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|catalog................................none|com.zaxxer.hikari.HikariConfig
    2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|connectionInitSql................................none|com.zaxxer.hikari.HikariConfig
    2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|connectionTestQuery................................none|com.zaxxer.hikari.HikariConfig
    2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|connectionTimeout................................3000|com.zaxxer.hikari.HikariConfig
    2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|dataSource................................none|com.zaxxer.hikari.HikariConfig
    2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|dataSourceClassName................................none|com.zaxxer.hikari.HikariConfig
    2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|dataSourceJNDI................................none|com.zaxxer.hikari.HikariConfig
    2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|dataSourceProperties................................{cacheServerConfiguration=true, useServerPrepStmts=true, elideSetAutoCommits=true, cacheResultSetMetadata=false, rewriteBatchedStatements=true, useSSL=false, cachePrepStmts=true, useLocalSessionState=true, maintainTimeStats=false, prepStmtCacheSize=8192, tinyInt1isBit=false, prepStmtCacheSqlLimit=2048, serverTimezone=UTC, password=, zeroDateTimeBehavior=round, netTimeoutForStreamingResults=0}|com.zaxxer.hikari.HikariConfig
    2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|driverClassName................................none|com.zaxxer.hikari.HikariConfig
    2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|exceptionOverrideClassName................................none|com.zaxxer.hikari.HikariConfig
    2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|healthCheckProperties................................{}|com.zaxxer.hikari.HikariConfig
    2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|healthCheckRegistry................................none|com.zaxxer.hikari.HikariConfig
    2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|idleTimeout................................600000|com.zaxxer.hikari.HikariConfig
    2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|initializationFailTimeout................................1|com.zaxxer.hikari.HikariConfig
    2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|isolateInternalQueries................................false|com.zaxxer.hikari.HikariConfig
    2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|jdbcUrl................................jdbc:mysql://172.17.108.172:3306/point_shard1?autoReconnect=true&characterEncoding=UTF-8&useUnicode=true&connectTimeout=3000&socketTimeout=3000|com.zaxxer.hikari.HikariConfig
    2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|keepaliveTime................................30000|com.zaxxer.hikari.HikariConfig
    2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|leakDetectionThreshold................................0|com.zaxxer.hikari.HikariConfig
    2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|maxLifetime................................1800000|com.zaxxer.hikari.HikariConfig
    2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|maximumPoolSize................................10|com.zaxxer.hikari.HikariConfig
    2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|metricRegistry................................none|com.zaxxer.hikari.HikariConfig
    2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|metricsTrackerFactory................................none|com.zaxxer.hikari.HikariConfig
    2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|minimumIdle................................10|com.zaxxer.hikari.HikariConfig
    2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|password................................|com.zaxxer.hikari.HikariConfig
    2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|poolName................................"HikariPool-2"|com.zaxxer.hikari.HikariConfig
    2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|readOnly................................false|com.zaxxer.hikari.HikariConfig
    2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|registerMbeans................................false|com.zaxxer.hikari.HikariConfig
    2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|scheduledExecutor................................none|com.zaxxer.hikari.HikariConfig
    2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|schema................................none|com.zaxxer.hikari.HikariConfig
    2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|threadFactory................................internal|com.zaxxer.hikari.HikariConfig
    2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|transactionIsolation................................default|com.zaxxer.hikari.HikariConfig
    2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|username................................"root"|com.zaxxer.hikari.HikariConfig
    2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|validationTimeout................................5000|com.zaxxer.hikari.HikariConfig
    2023-09-27 21:58:37.716|INFO |demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|HikariPool-2 - Starting...|com.zaxxer.hikari.HikariDataSource
    2023-09-27 21:58:37.716|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|Loaded driver with class name com.mysql.jdbc.Driver for jdbcUrl=jdbc:mysql://172.17.108.172:3306/point_shard1?autoReconnect=true&characterEncoding=UTF-8&useUnicode=true&connectTimeout=3000&socketTimeout=3000|com.zaxxer.hikari.util.DriverDataSource
    2023-09-27 21:58:37.733|DEBUG|demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|HikariPool-2 - Added connection com.mysql.jdbc.JDBC4Connection@5822ecda|com.zaxxer.hikari.pool.HikariPool
    2023-09-27 21:58:37.733|INFO |demo|1|127.0.0.1|7ca3c3d0e5c5462ab08da19687fff8f7|HikariPool-2 - Start completed.|com.zaxxer.hikari.HikariDataSource
    2023-09-27 21:58:37.844|DEBUG|demo|46|127.0.0.1|db1f31625b254dda93850baff340437c|HikariPool-2 - Pool stats (total=1, active=0, idle=1, waiting=0)|com.zaxxer.hikari.pool.HikariPool
    2023-09-27 21:58:37.845|DEBUG|demo|47|127.0.0.1|9e8f224bd94342eb8d21e691ddfc1ed5|HikariPool-2 - Added connection com.mysql.jdbc.JDBC4Connection@fc2553a|com.zaxxer.hikari.pool.HikariPool
    2023-09-27 21:58:37.845|DEBUG|demo|47|127.0.0.1|9e8f224bd94342eb8d21e691ddfc1ed5|HikariPool-2 - Added connection com.mysql.jdbc.JDBC4Connection@7b40a7b4|com.zaxxer.hikari.pool.HikariPool
    2023-09-27 21:58:37.861|DEBUG|demo|47|127.0.0.1|9e8f224bd94342eb8d21e691ddfc1ed5|HikariPool-2 - Added connection com.mysql.jdbc.JDBC4Connection@5760e7cb|com.zaxxer.hikari.pool.HikariPool
    2023-09-27 21:58:37.861|DEBUG|demo|47|127.0.0.1|9e8f224bd94342eb8d21e691ddfc1ed5|HikariPool-2 - Added connection com.mysql.jdbc.JDBC4Connection@2ea16ba7|com.zaxxer.hikari.pool.HikariPool
    2023-09-27 21:58:37.861|DEBUG|demo|47|127.0.0.1|9e8f224bd94342eb8d21e691ddfc1ed5|HikariPool-2 - Added connection com.mysql.jdbc.JDBC4Connection@24546eed|com.zaxxer.hikari.pool.HikariPool
    2023-09-27 21:58:37.861|DEBUG|demo|47|127.0.0.1|9e8f224bd94342eb8d21e691ddfc1ed5|HikariPool-2 - Added connection com.mysql.jdbc.JDBC4Connection@67ba4378|com.zaxxer.hikari.pool.HikariPool
    2023-09-27 21:58:37.877|DEBUG|demo|47|127.0.0.1|9e8f224bd94342eb8d21e691ddfc1ed5|HikariPool-2 - Added connection com.mysql.jdbc.JDBC4Connection@49665e64|com.zaxxer.hikari.pool.HikariPool
    2023-09-27 21:58:37.877|DEBUG|demo|47|127.0.0.1|9e8f224bd94342eb8d21e691ddfc1ed5|HikariPool-2 - Added connection com.mysql.jdbc.JDBC4Connection@70fcf1b4|com.zaxxer.hikari.pool.HikariPool
    2023-09-27 21:58:37.877|DEBUG|demo|47|127.0.0.1|9e8f224bd94342eb8d21e691ddfc1ed5|HikariPool-2 - Added connection com.mysql.jdbc.JDBC4Connection@70ea9569|com.zaxxer.hikari.pool.HikariPool
    2023-09-27 21:58:37.877|DEBUG|demo|47|127.0.0.1|9e8f224bd94342eb8d21e691ddfc1ed5|HikariPool-2 - After adding stats (total=10, active=0, idle=10, waiting=0)|com.zaxxer.hikari.pool.HikariPool
    

    相关文章

    Oracle如何使用授予和撤销权限的语法和示例
    Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
    下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
    社区版oceanbase安装
    Oracle 导出CSV工具-sqluldr2
    ETL数据集成丨快速将MySQL数据迁移至Doris数据库

    发布评论