电话
400 9058 355
MySQL连接池需根据DB的max_connections、应用实例数、网络与事务耗时合理配置,HikariCP应设connectionTimeout为3~5秒、validationTimeout≤wait_timeout,并通过JMX监控active/idle/pending等指标验证实效。
连接池大小不是越大越好,也不是拍脑袋定个 maxPoolSize=50 就完事。真实瓶颈往往在数据库侧的 max_connections 限制、网络往返耗时、事务持有连接时间,以及应用线程并发模型。盲目调大只会加剧连接争用和内存开销。
SHOW VARIABLES LIKE 'max_connections';常见默认值是 151,云数据库可能更低(如阿里云 RDS 默认 3200,但按规格阶梯分配)
DB max_connections × 0.6 ÷ 应用实例数;若单机部署 2 个 Java 服务实例,DB 允许 300 连接,则每个实例池上限建议 ≤ 90minIdle 过高(如 >20),空闲连接长期占着资源却无请求,反而拖慢 GC 和连接验证(尤其开启 testOnBorrow 时)HikariCP 是目前 Java 生态事实标准,但它的默

connectionTimeout 默认 30 秒,而 MySQL 的 wait_timeout 默认 8 小时——看似不冲突,但中间若经过代理(如 ProxySQL、AWS RDS Proxy),实际超时链路会变短,必须对齐。
connectionTimeout:建议设为 3~5 秒,比网络 RTT + DB 响应 P95 高 2 倍即可;设太长会让线程卡死在获取连接上validationTimeout:必须 ≤ MySQL 的 wait_timeout(单位秒),否则连接被 DB 主动断开后,Hikari 还没来得及校验就抛 Connection is closed
leakDetectionThreshold:开发/测试环境建议设为 60000(10 秒),能快速暴露未 close 的 Connection 或 Statement;生产可关或调到 600000(10 分钟)testOnBorrow(Hikari 已废弃),改用 connectionTestQuery=SELECT 1 + idleValidationMinutes=5 组合做空闲连接保活连接池再优化,也绕不开 MySQL 自身对连接的管控逻辑。几个关键变量不匹配,会导致连接频繁中断、认证失败或事务异常。
wait_timeout 和 interactive_timeout:决定空闲连接存活时间,必须 ≥ 连接池的 idleTimeout(Hikari 默认 10 分钟 = 600000 毫秒);否则连接被 DB 杀掉,池里还当它是活的max_connect_errors:若应用配置了错误的用户名/密码反复重连,达到阈值后该 IP 会被锁,表现为 Host 'x.x.x.x' is blocked;建议设为 100+ 并配合监控告警innodb_lock_wait_timeout:影响长事务阻塞时的等待行为,和连接池无关但常被误认为“连接卡住”;需结合慢日志和 SHOW ENGINE INNODB STATUS 定位真因很多团队只看监控图表里 “active connections” 曲线平滑,就以为调优成功。实际上,连接可能全被少数慢查询长期占用,新请求仍在排队等连接——这根本不是池在工作,是池在堵车。
active(当前借出数)、idle(空闲数)、pending(等待获取连接的线程数);若 pending > 0 持续存在,说明池子小了或有连接泄漏SELECT ID, USER, HOST, DB, COMMAND, TIME, STATE, INFO FROM information_schema.PROCESSLIST WHERE COMMAND != 'Sleep';关注
TIME 大于 10 秒且 STATE 为 Sending data 或 Locked 的连接-Dcom.zaxxer.hikari.logLevel=DEBUG(Hikari 5.x)观察连接获取/归还日志,确认是否频繁创建新连接(Added connection)而非复用真正有效的连接池调优,是让 pending 接近 0、active 波动贴合业务流量峰谷、且没有连接在池中空闲超时却被 DB 断开的情况。这些细节藏在日志和实时指标里,不在配置文件行数中。
邮箱:8955556@qq.com
Q Q:8955556
本文详解如何将Go官方present工具(用于生成HTML5...
PySNMP在不同版本中对SNMP错误状态(errorSta...
time.Sleep仅阻塞当前goroutine,其他gor...
PHPfopen()创建含特殊符号的文件名失败主因是操作系统...
WooCommerce中通过代码为分组产品动态聚合子商品的属...
io.ReadFull返回io.ErrUnexpectedE...
本文详解Yii2中控制器向视图传递ActiveRecord数...
本文详解为何通过wp_set_object_terms()为...
Pytest中使用@mock.patch类装饰器会导致补丁泄...
带缓冲的channel是并发安全的FIFO队列;make(c...