PHP,MySQL,IIS7.5对于简单查询来说需要太长时间

时间:2011-03-24 03:06:41

标签: php mysql iis-7.5 performance

我创建了一个简单的PHP测试页面,它连接到MySQL数据库,选择一个int值,然后释放结果。该页面需要5秒或更长时间才能加载。我已经看过很多关于这个或类似问题的帖子,但没有解决这些问题。这是我得到的输出:

mysql_connect took 4.8948628902435 seconds
mysql_select_db 0.00073790550231934 seconds
mysql_query took 0.0013959407806396 seconds
mysql_free_result took 2.0980834960938E-5 seconds

正如您所看到的,连接时间太长而其他一切都很快。

我尝试了什么

  • 已禁用IPv6
  • 使用IP而不是MySQL主机的FQDN。
  • 调整了一些配置设置。

事实

  • 所有其他非PHP网站立即响应。
  • Ping MySQL服务器的延迟时间为1毫秒。
  • 使用MySQL Query Browser查询数据库可以立即响应。

仅供参考 - 我不做PHP所以在建议修复时可以像对待婴儿一样对待我。

测试脚本

<?php
    $mtime = microtime();
    $mtime = explode(' ', $mtime);
    $mtime = $mtime[1] + $mtime[0];
    $starttime = $mtime;

    mysql_connect("the_ip||the_hostname", "the_username", "the_password");

    $mtime = microtime();
    $mtime = explode(" ", $mtime);
    $mtime = $mtime[1] + $mtime[0];
    $endtime = $mtime;
    $totaltime = ($endtime - $starttime);
    echo '<h2> mysql_connect took ' .$totaltime. ' seconds</h2>';
?>

跟踪路线是即时的: 顺便说一下,有问题的应用程序是MantisBT以及Wordpress。

  1     2 ms    <1 ms    <1 ms  1.2.3.4
  2    <1 ms    <1 ms    <1 ms  MYSQL5 [5.6.7.8]

3 个答案:

答案 0 :(得分:7)

要看的另一件事是“mysql_connect”,它可能会向您显示PHP很难解析(查找)mysql主机。您使用的是IP地址,localhost还是主机名? (当连接到php中的数据库时)如果是主机名,请尝试将IP添加到c:\ windows \ system32 \ drivers \ etc \ host

如果不起作用。 如果您的所有“事实”都是正确的,那么您的PHP脚本可能会出现问题。你可以发布它,这样我就可以看到你在运行什么?也发布mysql表信息,如“索引”等。

:)

答案 1 :(得分:3)

我遇到了类似的问题,PHP使用简单的select语句访问MySQL,但需要花费很长时间才能显示。

在另一个论坛的帮助下,这家伙建议我创建一个新网站并给它一个不同于80的端口,所以我做了,在IIS管理器中,在网站下,添加新网站并将其指向虚拟DIR,输入服务器192.168.2.2的IP地址,并为其提供端口82。

在防火墙中打开了端口82,从联网的XP机器上打开了进入浏览器192.168.2.2:82的端口,它很闪亮。第一次工作。

此外,在新网站的IIS管理器中,在输出缓存中,取消选中使用模式缓存,它允许页面运行并使用php页面输入数据。

回复有点迟了,但我想我会以任何方式分享它。

答案 2 :(得分:2)

你能试试这两个测试脚本吗? (注意microtime更改 - 你正在做的事情是一个古老的PHP4黑客... 你没有使用PHP4,是吗?

这个将测试MySQLi扩展,如果它可用:

<h1>MySQLi Test</h1>
<?php
    $starttime = microtime(true);

    $db = new mysqli("the_ip||the_hostname", "the_username", "the_password");

    $endtime = microtime(true);
    $totaltime = ($endtime - $starttime);
    echo '<h2> mysqli_connect took ' .$totaltime. ' seconds</h2>';

这个测试PDO扩展,如果它可用:

<h1>PDO Test</h1>
<?php
    $starttime = microtime(true);

    $db = new PDO("mysql:host=host_or_ip", "the_username", "the_password");

    $endtime = microtime(true);
    $totaltime = ($endtime - $starttime);
    echo '<h2>PDO took ' .$totaltime. ' seconds</h2>';

如果这些都经历了相同的延迟,那么我们知道它不仅仅是古代“mysql”扩展代码中的内容。