Hyperf MySQL连接池高并发调优需分层设参:min_connections设8–16保冷启,max_connections按DB规格控在32–96;connect_timeout 3–5秒、wait_timeout 2–3秒、max_idle_time≤30秒(双主≤20秒);禁用testOnBorrow/Return,启用testWhileIdle与3秒心跳PING检测。

Hyperf 的 MySQL 连接池在高并发场景下不能只靠默认配置撑住,关键是要根据实际负载动态调优核心参数,避免连接耗尽、空闲堆积或超时卡死。
min_connections 和 max_connections 要合理拉开梯度
最小连接数不是“越多越好”,而是要覆盖日常低峰请求;最大连接数则需兼顾峰值压力与数据库承载能力:
- 日常 QPS 在 500 左右、平均响应 20ms 的服务,min_connections 建议设为 8~16,保证冷启动后有足够连接可用
- max_connections 推荐设为 32~96,具体看 DB 实例规格(如 4C8G MySQL 建议不超过 64)和 ulimit 限制
- Swow 环境下必须用
min_connections/max_connections,旧版pool.min_connections配置会失效
超时类参数要分层控制
连接建立、等待获取、空闲回收这三类超时必须协同设置,否则容易出现“连得上但用不了”或“用完不放”的问题:
面向 CRM 系统的 MySQL 8 数据库模式设计。当用户需要为客户关系管理(CRM)系统设计、评审、优化或生成数据库模式时,应使用此项技能。
- connect_timeout 设为 3.0~5.0:防止因网络抖动或 DNS 解析慢导致协程长时间阻塞
- wait_timeout 控制在 2.0~3.0:当连接池满时,让业务快速失败而非无限排队,便于上游做熔断
- max_idle_time 必须 ≤30.0(双主场景建议 ≤20.0):强制回收闲置连接,避免 VIP 漂移后旧连接持续指向宕机节点
心跳与健康检测要关对地方
Hyperf 连接池本身不感知数据库状态,盲目开启 on-borrow 检测反而加重 DB 压力:
- 禁用 testOnBorrow / testOnReturn:这两项会在每次取/还连接时执行 SQL,QPS 高时直接翻倍打 DB
-
启用 testWhileIdle + 合理的 heartbeat:Swow 下设
heartbeat => true,配合check_interval => 3000(3 秒),后台轮询空闲连接有效性 - 心跳 SQL 优先用
PING,不要配validationQuery;Druid 类连接池默认就走 ping,无需额外设置
双主或高可用架构需额外约束
如果用了 Keepalived + VIP 或 MGR,连接池只是下游一环,必须配合 MySQL 层健康逻辑:
- Keepalived 的 vrrp_script 必须真实校验
SHOW SLAVE STATUS,不能只 ping 端口 - 应用层避免写后立即读,必要时加
SLEEP(0.01)或用SELECT SLEEP()等待复制追平 - auto_increment_increment 和 offset 务必在双主间错开,否则 INSERT 直接报 1062 冲突










