如何优化ThinkPHP数据库连接池及长连接以应对连接超时问题?
- 内容介绍
- 文章标签
- 相关推荐
本文共计925个文字,预计阅读时间需要4分钟。
这是最常见现象:
解决思路不是“加长 timeout”,而是让连接在使用前自检是否还活着:
- 在数据库配置中开启
'break_reconnect' => true(TP6.0+),它会在 PDO 报错后自动重连一次 - 更稳妥的做法是配合
'deploy' => 0(单库模式) +'check_conn' => true(TP6.3+ 新增),后者会在每次获取连接时执行PDO::getAttribute(PDO::ATTR_SERVER_INFO)做轻量探测 - 避免在事务中跨长时间操作——
beginTransaction()后如果 sleep(30),连接大概率已断,后续commit()必然失败
TP6 的 connection 配置里要不要设 'persistent' => true
不要。PHP-FPM 下开启长连接(persistent)反而容易引发连接泄漏和状态污染。
本文共计925个文字,预计阅读时间需要4分钟。
这是最常见现象:
解决思路不是“加长 timeout”,而是让连接在使用前自检是否还活着:
- 在数据库配置中开启
'break_reconnect' => true(TP6.0+),它会在 PDO 报错后自动重连一次 - 更稳妥的做法是配合
'deploy' => 0(单库模式) +'check_conn' => true(TP6.3+ 新增),后者会在每次获取连接时执行PDO::getAttribute(PDO::ATTR_SERVER_INFO)做轻量探测 - 避免在事务中跨长时间操作——
beginTransaction()后如果 sleep(30),连接大概率已断,后续commit()必然失败
TP6 的 connection 配置里要不要设 'persistent' => true
不要。PHP-FPM 下开启长连接(persistent)反而容易引发连接泄漏和状态污染。

