解决Windows环境下PHP连接MySQL很慢的问题

博客讲述了在Windows系统中遇到的一个问题:接口请求由于MySQL连接慢导致响应时间长。尽管MySQL执行SQL速度快,但连接时间却达到1秒多。原因是localhost在Windows上解析到了IPv6地址,导致连接延迟。通过将localhost替换为127.0.0.1解决了此问题,同时优化了接口性能。此外,通过缓存重复查询进一步提升了接口执行速度。
摘要由CSDN通过智能技术生成

接触到一个网站,静态资源和接口都在同一台服务器,静态资源加载很快,都是几十上百毫秒就可以加载,但是接口请求都很慢,平均有6-7秒。

先查看了接口请求日志,发现每个接口的执行时间确实都很长,查看接口代码,代码不多而且都是简单的查询,代码应该没什么问题。

查看了MySQL慢日志,里面没有慢SQL的记录,又利用框架记录SQL的执行时间,执行都很快,基本是10毫秒以内的级别。

这就奇怪了,怎么会这样?

最后还是看框架与MySQL交互相关的日志,发现 connect time 比较大,每次都要1秒多,原来是连接慢,但是MySQL就在本机,怎么会连接这么慢呢?

看了一些连接MySQL的配置,主机地址是 localhost 再考虑到题目说的Windows系统,考虑会不会是 localhost的问题?于是改成127.0.0.1试一下,果然接口执行速度马上就上来了,connect time 由 1秒多变成了几毫秒,整个接口执行速度平均到了500毫秒以内。

总结一下,这里是由于Windows系统把localhost解析到了IPV6地址[::1]去了,所以在连接的时候,先连接IPV6的地址,连不上再连IPV4地址,而我们的软件配置都是监听的IPV4的地址的。

所以实际这里的解决办法有两个:

1、把localhost指向IPV4地址,即在hosts里面配置 127.0.0.1  localhost

2、连接MySQL的时候配置地址为127.0.0.1而不是localhost

PS:

在Linux环境中,localhost与127.0.0.1对数据库的影响几乎没有区别,但是据网友所说127.0.0.1是通过网卡传输,依赖网卡,并受到网络防火墙和网卡相关的限制。也有网友说两者都不经过网卡,我比较信任第二种。localhost不受限制,在消耗网络资源的服务器中,使用localhost更加恰当!

在本地环境中,建议使用127.0.0.1的方式连接数据库,可以大幅度提升速度,本地体验极佳!

再PS:

前面说到接口执行速度平均到了500毫秒感觉还是有点慢,再次检查了一下日志,发现每个接口请求都会执行相同的几个查询,这就有问题了,每次请求都查询的数据为什么不缓存下来呢?于是加上了缓存,接口请求速度又快了几倍,达到200毫秒以内了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值