Drupal中远程数据库的极端缓慢

我们试图扩展我们的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的执行时间也不是不合时宜的。

查询的数量似乎没有什么区别 – 我们看起来是相同的5-10秒延迟,无论页面是否有12个查询或250个。

有关我应该从哪里开始排除故障的任何build议? 我很困惑。

由于其他原因,似乎您与数据库的连接速度很慢。 简单的命令行连接有多快? (即非php)

我的主要嫌疑人会失败(=超时)在远程或本地服务器上查找dns; 正向和反向查找。

从这个页面 :用–skip-name-resolve启动mysqld

如果这没有帮助,我会开始分析tcp连接(tcpdump / wireshark)来隔离问题。 (在我的头顶上:本地dns查找,防火墙问题(重载NAT的地方?),在某个地方的链路上的packetloss,..)

当这个问题解决了,你可能也想确保你有持久的数据库连接在PHP中。

在MySQL服务器中使用名字parsing的原因可能是延迟。 对于每个连接,mysql会检查客户端的DNS名称,这将大大增加延迟。

如果在my.cnf中有行skip-name-resolve ,可以检查是否属于这种情况。 如果不存在,请添加此行,重新启动服务器并重试。