![Drupal 中的远程数据库运行速度极慢](https://linux22.com/image/535555/Drupal%20%E4%B8%AD%E7%9A%84%E8%BF%9C%E7%A8%8B%E6%95%B0%E6%8D%AE%E5%BA%93%E8%BF%90%E8%A1%8C%E9%80%9F%E5%BA%A6%E6%9E%81%E6%85%A2.png)
我们正在尝试扩展我们的 Drupal 安装,并决定使用一些专用的 MySQL 盒。不幸的是,当我们尝试使用远程数据库时,我们遇到了极度缓慢的问题 - 页面加载时间从约 200 毫秒缩短到 5-10 秒。
服务器之间的延迟极小——十分之一或二毫秒。
PING 10.37.66.175 (10.37.66.175) 56(84) bytes of data.
64 bytes from 10.37.66.175: icmp_seq=1 ttl=64 time=0.145 ms
64 bytes from 10.37.66.175: icmp_seq=2 ttl=64 time=0.157 ms
64 bytes from 10.37.66.175: icmp_seq=3 ttl=64 time=0.157 ms
64 bytes from 10.37.66.175: icmp_seq=4 ttl=64 time=0.144 ms
64 bytes from 10.37.66.175: icmp_seq=5 ttl=64 time=0.121 ms
64 bytes from 10.37.66.175: icmp_seq=6 ttl=64 time=0.122 ms
64 bytes from 10.37.66.175: icmp_seq=7 ttl=64 time=0.163 ms
64 bytes from 10.37.66.175: icmp_seq=8 ttl=64 time=0.115 ms
64 bytes from 10.37.66.175: icmp_seq=9 ttl=64 time=0.484 ms
64 bytes from 10.37.66.175: icmp_seq=10 ttl=64 time=0.156 ms
--- 10.37.66.175 ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 8998ms
rtt min/avg/max/mdev = 0.115/0.176/0.484/0.104 ms
Drupal 的devel.module
计时器显示远程数据库上的数据库查询运行速度没有任何降低 - 无论是本地服务器还是远程服务器,大约 150 微秒。使用 XHProf 进行分析也显示 PHP 执行时间没有失控。
查询的数量似乎没有什么区别——无论一个页面有 12 个查询还是 250 个查询,我们似乎都有相同的 5-10 秒的延迟。
关于我应该从哪里开始进行故障排除,有什么建议吗?我很困惑。
答案1
似乎由于其他原因,您与数据库的连接速度很慢。简单的命令行连接有多快?(即非 php)
我主要怀疑是远程或本地服务器上的 DNS 查找失败(=超时);正向和反向查找。
从这一页:启动 mysqld--skip-name-resolve
如果这没有帮助,我将开始分析 tcp 连接(tcpdump/wireshark)以隔离问题。(我首先想到的是:本地 DNS 查找、防火墙问题(某处的 NAT 盒过载?)、某处的链接上出现数据包丢失,..)
当这个问题解决后,您可能还想确保在 PHP 中拥有持久的 DB 连接。
答案2
原因可能是在 MySQL 服务器中使用名称解析时增加了延迟。对于每个连接,mysql 都会检查客户端的 DNS 名称,这将大大增加延迟。
如果您的 my.cnf 中有此行,您可以检查是否属于这种情况skip-name-resolve
。如果没有,请添加此行,重新启动服务器并重试。