ThinkPHP 6.0 和 8.0 在 Swoole 环境下连接池配置位置不同:TP6 需在 config/swoole.php 的 database 节点配置 enable、min_connections 等参数,database.php 中 pool_size 无效;TP8 同样只认 config/swoole.php,database.php 中任何 pool 字段均被忽略,且必须显式调用 Db::pool() 才启用池化。

想在 Swoole 环境下让 ThinkPHP 应用真正复用数据库连接、避免 Too many connections 报错,必须区分 TP6.0 和 TP8.0 的配置逻辑——TP6 的 pool_size 写在 database.php 里完全无效,TP8 的 database.php 加任何 pool 字段都白配,两者的生效位置、调用方式、参数含义全不相同。
ThinkPHP 6.0 连接池配置(Swoole 环境)
第一步:确认已安装 think-swoole 扩展且 Swoole 版本 ≥ 4.8.0。
第二步:运行命令启动协程服务:php think swoole,不能走 php-fpm 或 php -S。
第三步:打开 config/swoole.php,在 database 节点下写入配置:
① 'enable' => true(必须为布尔 true,写成字符串 "true" 或数字 1 会静默失效);
② 'min_connections' => 5(Worker 启动时预热连接数,设太低首请求延迟明显);
③ 'max_connections' => 50(单 Worker 内最大活跃连接数,不是 MySQL 全局上限);
④ 'wait_timeout' => 3.0(协程等待空闲连接超时秒数,设太小直接抛 Swoole\Coroutine\MySQL\Exception)。
关键验证点:在协程中连续执行 Db::pool()->getPdo() 两次,打印 spl_object_id(),若 ID 相同说明复用成功;若不同,说明没进池或配置未生效。
注意:TP6 中 deploy => 1 是 FPM 下的 PDO 实例缓存开关,与 Swoole 池完全无关;【database.php 里写的 pool_size 字段会被彻底忽略】。
立即学习“PHP免费学习笔记(深入)”;
ThinkPHP 8.0 连接池配置(Swoole 环境)
TP8 原生无连接池能力,必须依赖 think-swoole 扩展,且配置入口唯一:config/swoole.php 的 database 节点。
方法一:最小可用配置
在 config/swoole.php 中写入:'database' => [ 'enable' => true, 'min_connections' => 5, 'max_connections' => 50, 'wait_timeout' => 3.0, 'heartbeat' => 30 ]。
方法二:显式启用池化调用
✅ 正确写法:Db::pool()->table('user')->select();
✅ 事务也必须走池:Db::pool()->transaction(function () { ... });
❌ 错误写法:Db::table('user')->select()(绕过池,仍走 Db::connect());
❌ 模型中 self::where()->find() 默认不走池,底层未代理。
TP8 的 config('database') 返回的是协程安全的连接池配置对象,不是原始数组,var_dump 看不到真实参数。你改了 database.php 里的任何 pool 字段,运行时都不会读取。
三层硬限制对齐检查(TP6/TP8 通用)
光配池没用,MySQL、Swoole Worker、协程并发量三者必须对齐:
① MySQL 侧:SHOW VARIABLES LIKE 'max_connections'; 必须 ≥ max_connections × swoole.server.worker_num;
② Swoole 侧:swoole.server.worker_num 决定最多几个进程能并发取连接,设成 2,池里有 100 连接也只用得上 2 个;
③ 协程侧:一个 Worker 启了 200 个协程查库,但池子只有 8 个连接,剩下 192 个协程全在等 wait_timeout 超时。
压测时出现 SQLSTATE[HY000] [2002] Connection refused,90% 是因为 【max_connections 设得太大,超过 MySQL 允许的最大连接数】,而不是代码没写对。



















