【问题标题】:Connecting to mysql server(localhost) very slow连接到 mysql 服务器(本地主机)非常慢
【发布时间】:2011-06-05 01:58:42
【问题描述】:

其实有点复杂:

总结:与数据库的连接很慢。

页面渲染大约需要 10 秒,但页面上的最后一条语句是回显,当页面在 firefox 中加载时我可以看到它的输出(IE 相同)。在谷歌浏览器中,输出仅在加载完成时才可见。不同浏览器的加载时间大致相同。

在调试时,我发现它的数据库连接造成了问题。数据库在另一台机器上。进一步调试。我在本地机器上部署了数据库..所以现在数据库连接在 127.0.0.1 但连接仍然需要很长时间。

这意味着问题出在 APACHE/PHP 而不是 mysql。但后来我将我的代码部署在另一台远程连接到数据库的机器上。一切似乎都很好。

基本上,该应用程序使用了几个 mod_rewrite.. 但我删除了所有 .htaccess 文件,仍然存在连接缓慢的问题..

我在我的机器上安装了另一个 APACHE 并使用了默认设置。连接仍然很慢。

我添加了以下语句来测量执行时间

    $stime = microtime();  
    $stime = explode(" ",$stime);  
    $stime = $stime[1] + $stime[0];  

// my code -- it involves connection to DB

    $mtime = microtime();  
    $mtime = explode(" ",$mtime);  
    $mtime = $mtime[1] + $mtime[0]; 

    $totaltime = ($mtime - $stime);
    echo $totaltime;

输出为 0.0631899833679

但 firebug Net 面板显示总加载时间为 10-11 秒。谷歌浏览器也是如此

我试图关闭 Windows 防火墙.. 连接仍然很慢

我只是找不到原因.. 我尝试了多个数据库服务器.. 多个 apache.. 似乎没有任何工作.. 知道可能是什么问题吗?

[编辑]

请浏览 cmets 部分了解更多详情。实际上,我认为我正在接近获得解决方案。基本上我正在开发我自己的框架,其中包括通过 .htaccess 文件重写 url。我添加了一些 css 和 js 文件,我注意到这些文件被发送了多个请求,没有充分的理由(在 firefox 中)。我认为这个问题与 CONTENT-LENGTH 标头有些相关,因为 firefox 没有收到此标头,因此它一直在等待内容(并且可能会出现超时).. 它与 Transfer-Encoding:chunked 有什么关系吗?

【问题讨论】:

  • 您能提供该页面的链接吗?你确定不是图像\css\js 有问题吗,你能用上面的代码来计算整个页面的加载时间吗,从最开始的时候开始,在最后结束。
  • 只是一个注释; microtime(true) 将数字作为带有 µsecs 的浮点数返回,因此您可以避免加法。
  • 是的,它不是图像、css 或 js.. 我从页面中删除了所有内容.. 它只有 2 个回显语句.. 一个回显执行时间,另一个回显从 db 中选择的记录
  • 该页面在我的机器上。所以我不能提供任何直接链接
  • 由于缓存,这可能是测试查询时间的不好方法。您可能会发现连续多次运行相同的代码会导致不同的结果。

标签: php mysql apache database-connection


【解决方案1】:

我在这里聚会迟到了,但我有一个解决这个问题的方法,供以后访问此页面的任何访问者使用。

只需更改:

 $link = mysqli_connect('localhost','username','password','db');

收件人:

 $link = mysqli_connect('127.0.0.1','username','password','db');

这将使本地主机的速度提高多达 1000%。

【讨论】:

  • 我今天刚打了这个。为什么会这样?
  • #SoftwareEngineering
  • 奇怪的是,这个更改(到 127.0.0.1)也解决了我们的生产服务器问题。我们在 /etc/hosts 中正确设置了 localhost。你可以在你的 mysql 慢查询日志中看到这个特定问题的迹象(如果你打开了它),它包括 USE TABLENAME;作为运行缓慢的查询的一部分。我们总是在小的、正确索引的表上看到它,简单的 sql 没有理由运行缓慢。
【解决方案2】:

fast-cgi 解决了这个问题.. 感谢 srisa.. 只是将 apache 更改为通过 fast-cgi 运行 php 文件

【讨论】:

  • 但是为什么!?这对 MySQL 连接时间有何影响
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-21
  • 2019-09-21
相关资源
最近更新 更多