ThinkPHP 6.0 不支持数据库连接池,config/database.php 中的 max_connections、pool_size 等配置完全无效;其采用同步阻塞模型,无连接复用与池化逻辑,所有 pool 相关字段均被忽略。

ThinkPHP 6.0 本身不支持数据库连接池,config/database.php 中的 max_connections、pool_size 等字段完全无效。这不是配置写错,而是框架底层未实现连接池机制。
根本原因:TP6.0 没有内置连接池能力
TP6.0 使用的是同步阻塞模型,每次请求都会新建 PDO 连接(除非手动开启持久连接),连接生命周期随请求结束而释放。它没有连接复用、空闲管理、排队等待等池化逻辑。所有关于“pool”“max_connections”的配置,只要写在 database.php 里,一律被忽略。
常见误操作与对应真相
- 在 database.php 里配 'pool' => ['max_active' => 10]:该配置不会被读取,框架压根不解析这个字段
- 以为开了 'params' => [PDO::ATTR_PERSISTENT => true] 就是连接池:这只是让 PHP 尝试复用进程内连接,不是池,不可控、易泄漏、FPM 下效果差,且与 max_connections 无关
- 把 MySQL 的 max_connections 调大,以为能解决应用层连接获取失败:这只能缓解“Too many connections”报错,但无法解决应用频繁建连、连接堆积、响应延迟等问题
真正有效的解决方案路径
- 升级到 TP6.1+ 并配合 think-orm v3.0+,才开始支持基础连接池逻辑(需配 get_timeout、pool 等)
- 使用 topthink/think-swoole 扩展(≥3.1.0)+ Swoole 协程环境,在 config/swoole.php 中配置 db_pool 参数,由 Swoole\Database\PDOPool 管理协程安全的连接复用
- 若必须停留在 TP6.0,可自行封装 PDO 单例 + 连接计数器 + ping 检测,但不属于“配置生效”,而是代码层补全
简言之:TP6.0 的 max_connections 是个伪概念,它不属于框架能力范围。想用连接池,必须换执行环境(Swoole)或升版本(TP6.1+),否则所有 database.php 里的 pool 相关配置都是摆设。



















