Hyperf 3.2 Swow模式下MySQL连接池max_connections应设为16–64,需满足check_interval≥3000ms、retry_interval≠0、max_idle_time≤MySQL wait_timeout,并依据服务端剩余连接数、应用并发量与内存余量三者最小值动态确定。

Hyperf 3.2 在 Swow 模式下配置 MySQL 连接池的 max_connections,不是直接配 MySQL 服务端的 max_connections,而是配置 Hyperf 应用层连接池能创建的最大协程连接数(即客户端侧“最多同时借出多少个连接”)。这个值必须与 MySQL 服务端的 max_connections、应用并发量、服务器资源协同设计,否则容易触发拒绝连接或资源耗尽。
✅ 正确配置位置:config/autoload/databases.php
在数据库配置的 pool 子项中设置:
'default' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'port' => (int) env('DB_PORT', 3306),
'database' => env('DB_DATABASE', 'test'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', ''),
// ... 其他基础配置
'pool' => [
'min_connections' => 4,
'max_connections' => 32, // ← 关键:Swow 模式下建议设为 16–64 区间
'connect_timeout' => 5.0,
'wait_timeout' => 2.0,
'heartbeat' => true,
'retry_interval' => 100,
'check_interval' => 3000, // ≥3000ms,Swow 强制要求
'max_idle_time' => 25920, // 7.2 小时,需 ≤ MySQL 的 wait_timeout(默认28800)
],
],
⚠️ 注意:
max_connections是连接池自身容量上限,不是 MySQL 服务端参数。它控制的是:同一时刻最多有多少个 Swow 协程能从该池中成功 borrow 到连接。
? Swow 模式下的关键适配要点
check_interval必须 ≥ 3000(毫秒)
Swow 的心跳检测机制对低频检查不兼容,设成2000或0会触发异常中断。retry_interval不能为 0
否则连接失败后永不重试,表现为Connection refused后长期卡住。max_idle_time要显式设置,且必须 ≤ MySQL 的wait_timeout
否则空闲连接大概率被 MySQL 主动断开,复用时抛MySQL server has gone away。不要盲目调高
max_connections
Swow 协程轻量,但每个连接仍占内存(约 1–3 MB),设128可能就吃掉 200+ MB;推荐从32起步,按压测结果逐步上调。
? 如何确定合理的 max_connections 值?
参考三者取最小值:
面向 CRM 系统的 MySQL 8 数据库模式设计。当用户需要为客户关系管理(CRM)系统设计、评审、优化或生成数据库模式时,应使用此项技能。
MySQL 服务端剩余可用连接数
SELECT @@max_connections - COUNT(*) FROM information_schema.processlist;Hyperf 实际并发请求数 × 平均连接持有时间占比
例如:QPS=200,平均 SQL 耗时 50ms,连接占用率 ≈ 200 × 0.05 = 10 →max_connections ≥ 12~16即可满足。服务器内存余量
每连接按 1.5 MB 估算:若只给 PHP 分配 1 GB 内存,max_connections ≤ 600是理论极限,但 Swow 场景下通常 32–64 更稳。
? 常见错误配置(务必避免)
- 把
max_connections设成1000且没调大 MySQL 的max_connections→ 必现Too many connections - 忘记配
max_idle_time或设得比wait_timeout大 → 连接复用失败率飙升 -
heartbeat => false+ 长期空闲 → Swow 下连接静默失效,无报错但查询失败 -
min_connections设太高(如 50)却没足够流量 → 启动即建 50 连接,浪费 DB 资源
不复杂但容易忽略










