数据库连接池配置与调优

周

周算法

· 阅读 1358

分享
数据库连接池

数据库连接池配置与调优

数据库连接是宝贵的资源。每次创建连接都需要TCP三次握手和MySQL认证,耗时约20-50ms。如果不使用连接池,每次查询都创建新连接,不仅性能差,还可能导致连接数耗尽。连接池通过复用连接解决了这个问题,但配置不当同样会引发问题。

数据层的稳定性,往往决定了一个系统的下限。「数据库连接池配置与调优」所涉及的MySQL 与 RDS 性能治理,正是最容易「平时看不见、出事要人命」的部分:平时跑得平稳,一旦出问题就是数据丢失或业务停摆,因此值得投入系统性的精力去治理。

数据库连接池配置与调优

HikariCP配置详解

HikariCP是Java生态性能最好的连接池,Spring Boot 2.x+默认使用。核心配置参数:

  • maximumPoolSize:最大连接数。默认10。设置公式:核心数 * 2 + 磁盘数。对于大多数应用,10-20个连接就够了。设置过大反而降低性能(上下文切换开销)。
  • minimumIdle:最小空闲连接数。默认与maximumPoolSize相同。建议设置为与最大连接数一致,避免连接频繁创建销毁。
  • connectionTimeout:获取连接超时时间(毫秒)。默认30000(30秒)。建议设置为5000-10000ms。超时应该快速失败,而不是让请求一直等待。
  • idleTimeout:空闲连接最大存活时间(毫秒)。默认600000(10分钟)。只在minimumIdle小于maximumPoolSize时生效。
  • maxLifetime:连接最大生命周期(毫秒)。默认1800000(30分钟)。必须比MySQL的wait_timeout小几分钟,否则连接池持有的连接可能已被MySQL关闭。

常见问题排查

连接泄露:应用获取连接后没有正确关闭。HikariCP有泄露检测功能:设置 leakDetectionThreshold=60000,连接被借出超过60秒未归还就会打印告警日志。

连接不够用:频繁出现Connection not available异常。原因可能是:连接数设置太小、慢SQL导致连接占用时间过长、事务范围太大。解决方案:先优化慢SQL,再适当增大连接池。

连接频繁断开:MySQL主动关闭空闲连接,但连接池不知道。解决:设置maxLifetime小于MySQL的wait_timeout。HikariCP会自动淘汰过期连接并创建新连接。

监控

HikariCP通过Micrometer暴露监控指标:activeConnections(活跃连接数)、idleConnections(空闲连接数)、pendingConnections(等待连接的线程数)、connectionTimeoutCount(超时次数)。将这些指标接入Prometheus + Grafana,及时发现连接池异常。

从排查到预防:把经验沉淀为机制

  • 慢的问题先定位再动手:用执行计划与监控数据说话,避免凭感觉改索引、改参数。
  • 变更留痕:每一次调整记录原因与预期,便于复盘与回退。
  • 容量预警前置:为存储、连接数、内存等关键水位设置提前量告警。
  • 演练常态化:把恢复演练、切换演练纳入日常,而不是出事才第一次做。

机制化的沉淀,能让MySQL 与 RDS 性能治理从「个人经验」变成「团队能力」。

需要外部支持时,可以找安徽卓牛

针对MySQL 与 RDS 性能治理,安徽卓牛可以结合阿里云数据库与存储产品体系,协助客户完成选型评估、迁移方案设计与上线后的持续优化,全程由具备阿里云认证资质的技术团队跟进。

无论是一次专项排查,还是长期的运维托管,都可以通过官网在线客服与安徽卓牛取得联系,说明现状与诉求即可。