PDO连接缓慢的一个解决方法
太长不看版:把 localhost 换成 127.0.0.1
1 问题
在写一个小玩具的时候,一个逻辑十分简单的接口耗时超过2s,十分不正常。
2 排查
2.1 接口检查
接口逻辑十分简单,只包含了两个部分:数据查询、json_encode。json_encode
作为内置函数,加上以往经验,不太可能是问题的关键。通过比较部分执行时间,数据查询部分执行时间约为另一部分的 10E5 倍。再用 navicat 手工构造执行了一下相同语句,耗时仅有 0.017s,更加肯定了连接上的问题。
2.2 查看user表
既然是连接上的问题,那就去看看 mysql
库里有没有好康的。无意之中点到了 user
表,突然有了一些想法。
莫非,是 ipv6 的锅?
随手 ping 了一下 localhost
试着用 telnet 连接了一下 3306 端口,localhost
和 127.0.0.1
成功,::1
失败。
3 解决
于是乎,将 mysql:host=localhost
改为 mysql:host=127.0.0.1
,刷新
好起来了
所以,估计是 localhost 默认解析为 ipv6 地址,导致无法连接和超时。体现在应用上就是加载时间长了。
PDO连接缓慢的一个解决方法
https://blog.loststar.tech/posts/2e64231/