繁体   English   中英

PHP远程MySQL数据库连接非常慢

[英]PHP remote MySQL database connection is very SLOW

我在新加坡和印度的不同地理位置上有2台服务器。

我需要从服务器2的php脚本连接服务器1。脚本看起来像这样:

<?php 

echo microtime(true)."\n";
$con = mysql_pconnect('server1','username','password');

$db = mysql_select_db('database_name',$con);                      

echo microtime(true)."\n";

$q = "select * from tablename where id='35'";
$result = mysql_query($q);

echo microtime(true)."\n";

?>

该脚本的输出如下所示:

1373977322.9081
1373977324.377
1373977324.6625

如您所见,第二和第三之间的时间大约是2秒,这意味着mysql_pconnect花费了更多的2秒。 第三和第四(选择查询)之间的时间非常短。

另外,如果我在server1上运行此脚本并将其连接到server1本身,则需要20毫秒。

无法弄清楚为什么连接时间太长。 我还尝试了一些操作,例如“ 跳过名称解析”和持久连接。 但是:(

我该如何调试这个东西???

从计时中可以看到,打开连接需要1.4689秒,而查询需要0.2855秒。 如果一次性DNS查找是唯一的问题,那么查询的速度将大大提高:300毫秒是很长的时间。 这意味着问题必须在其他地方。

首次打开连接时,客户端和服务器会进行协商,在协商中,一个问另一个问题,然后等待答复很多次。 如果网络具有高延迟,则每个问答周期将花费不小的时间,这将加起来。 您可以使用ping来衡量两台计算机之间的网络延迟。

这就是为什么您看不到本地连接几乎没有延迟(低延迟)的原因,并且为什么在建立连接后查询就会快速运行(没有协商)。 没有真正的解决办法,只是确保一旦获得连接就可以充分利用它,除非绝对必要,否则避免建立新的连接。

首先,尝试使用PDO像这样的php代码做同样的事情:

echo microtime(true)."\n";
$con = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');    
echo microtime(true)."\n";    
$q = $con->query("select * from tablename where id='35'");    
echo microtime(true)."\n";

如果执行时间仍然相同,则必须执行缓存系统以减少与数据库的连接数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM