PDO连接缓慢的一个解决方法

太长不看版:把 localhost 换成 127.0.0.1

1 问题

在写一个小玩具的时候,一个逻辑十分简单的接口耗时超过2s,十分不正常。

加载时间大大超出预期

2 排查

2.1 接口检查

接口逻辑十分简单,只包含了两个部分:数据查询、json_encode。json_encode作为内置函数,加上以往经验,不太可能是问题的关键。通过比较部分执行时间,数据查询部分执行时间约为另一部分的 10E5 倍。再用 navicat 手工构造执行了一下相同语句,耗时仅有 0.017s,更加肯定了连接上的问题。

navicat

2.2 查看user表

既然是连接上的问题,那就去看看 mysql 库里有没有好康的。无意之中点到了 user 表,突然有了一些想法。

user表

莫非,是 ipv6 的锅?

随手 ping 了一下 localhost

ping

试着用 telnet 连接了一下 3306 端口,localhost127.0.0.1 成功,::1 失败。

3 解决

于是乎,将 mysql:host=localhost 改为 mysql:host=127.0.0.1 ,刷新

修改后

好起来了

所以,估计是 localhost 默认解析为 ipv6 地址,导致无法连接和超时。体现在应用上就是加载时间长了。


PDO连接缓慢的一个解决方法
https://blog.loststar.tech/posts/2e64231/
作者
loststar
发布于
2021年1月4日
许可协议