HikariCP 数据库连接池配置

HikariCP 数据库连接池配置规范(v2025-12)

适用场景:对外提供接口请求,数据库类型 PostgreSQL / MySQL / Oracle

目标:高并发、低延迟、故障隔离


1 连接池大小与分组

参数 计算公式 示例(4C8G)
minimumIdle (CPU 核数 × 2) + 磁盘数 (4×2)+2 = 10
maximumPoolSize minIdle × (2~5) 10 × 5 = 50

约束

  • 所有节点 maximumPoolSize 总和 ≤ 数据库实例最大连接数
  • 接口线程与定时任务 必须分离双连接池,避免互相挤占

2 连接可用性校验

场景 推荐做法
JDBC4 驱动(PG 42.x+) 无需 connectionTestQuery,Hikari 自动调用 isValid()
旧驱动 显式 connectionTestQuery: SELECT 1
参数 建议值 说明
maxLifetime 900 000 ms(15 min) 到期强制回收,防止"僵"连接
leakDetectionThreshold 5 000 ms 持有超 5 s 未归还即打印堆栈,方便排查泄露
复制代码
日志全是无效堆栈,真正泄露被淹没
先拿 P99 SQL 耗时 做基线,再设 leak = P99 × 2;同时把阈值做成 环境变量,灰度时可动态降

3 超时配置(生产网络稳定,宜激进)

参数 默认 建议 备注
connectionTimeout 30 000 ms 2 000 ms 拿连接最大等待
validationTimeout 5 000 ms 1 000 ms 检测连接有效性;必须 < connectionTimeout

4 JDBC 层高可用

数据库 超时参数 单位 用法示例
PostgreSQL socketTimeout jdbc:postgresql://h1,h2/db?socketTimeout=10
MySQL socketTimeout 毫秒 jdbc:mysql://h1,h2/db?socketTimeout=10000
Oracle oracle.jdbc.ReadTimeout 毫秒 连接属性单独配置

主库不可用时,驱动按 URL 列表自动 fail-over 到同城灾备节点

超时值 ≈ 接口最大 SLA,防止慢查询霸占连接


5 配置模板(YAML)

yaml 复制代码
spring:
  datasource:
    jdbc-url: jdbc:postgresql://host1:5432,host2:5432/mydb?socketTimeout=10
    username: ${DB_USER}
    password: ${DB_PWD}
    driver-class-name: org.postgresql.Driver
    hikari:
      pool-name: HikariCP_master
      minimum-idle: 10              # 见公式
      maximum-pool-size: 50         # ≤ minIdle × 5
      connection-timeout: 3000      # 3 s
      validation-timeout: 2000      # 2 s
      leak-detection-threshold: 6000 # 6 s
      max-lifetime: 900000          # 15 min
相关推荐
心动啊1214 分钟前
SQLAlchemy 的使用
数据库
曾经的三心草2 小时前
redis-2-数据结构内部编码-单线程-String命令
数据结构·数据库·redis
二哈喇子!2 小时前
基于SSM框架的公交车查询系统的设计与实现
java·数据库·ssm
Coder_Boy_2 小时前
基于SpringAI的在线考试系统-智能考试系统-学习分析模块
java·开发语言·数据库·spring boot·ddd·tdd
阿杰 AJie2 小时前
MySQL 聚合函数总表(完整版)
数据库·mysql
玄同7652 小时前
Python「焚诀」:吞噬所有语法糖的终极修炼手册
开发语言·数据库·人工智能·python·postgresql·自然语言处理·nlp
cdut_suye2 小时前
解锁函数的魔力:Python 中的多值传递、灵活参数与无名之美
java·数据库·c++·人工智能·python·机器学习·热榜
尽兴-2 小时前
MySQL 8.0高可用集群架构实战深度解析
数据库·mysql·架构·集群·高可用·innodb cluster
遇见火星2 小时前
MySQL常用命令大全(2026最新版)
数据库·mysql·oracle
霖霖总总3 小时前
[小技巧42]InnoDB 索引与 MVCC 的协同工作原理
运维·数据库·mysql