PHP, MySQL, IIS7.5 занимает слишком много времени для простых запросов - PullRequest
4 голосов
/ 24 марта 2011

Я создал простую тестовую страницу 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 вместо FQDN для хоста MySQL.
  • Изменены некоторые настройки конфигурации.

Факты

  • Все другие не-PHP-сайты отвечают мгновенно.
  • Проверка связи с сервером 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 ]

7 голосов
/ 24 марта 2011

Другая вещь, на которую стоит обратить внимание, это «mysql_connect», которая может показать вам, что PHP испытывает трудности с разрешением (поиском) хоста mysql.Используете ли вы IP-адрес, локальный хост или имя хоста?(при подключении к базе данных в php) Если это имя хоста, попробуйте добавить IP в c: \ windows \ system32 \ drivers \ etc \ host

, если это не работает.Если все ваши «Факты» верны, то у вас может быть проблема с вашим PHP-скриптом.Можете ли вы опубликовать это, чтобы я мог видеть, что вы работаете?Также отправьте информацию таблицы mysql как "Индексы" и т. Д.

:)

3 голосов
/ 12 октября 2012

У меня была похожая проблема, PHP обращался к MySQL с помощью простого оператора select, но отображал его целую вечность.

С помощью другого форума парень предложил создать новый веб-сайт и назначить ему порт, отличный от 80, и я сделал это. В диспетчере IIS в разделе сайтов добавьте новый сайт и укажите его в виртуальном DIR, введите IP-адрес сервера 192.168.2.2 и дал ему порт 82.

Открыл порт 82 в брандмауэре и с подключенного к сети компьютера XP, вошел в браузер 192.168.2.2:82, и он светился. Работал первый раз.

Кроме того, в диспетчере IIS для нового веб-сайта в разделе «Кэширование вывода» снимите флажок «Кэш режима использования», и он позволяет страницам запускать и вводить данные с помощью страниц php.

Немного опоздал с ответом, но подумал, что поделюсь им любым способом.

2 голосов
/ 24 марта 2011

Не могли бы вы также попробовать эти два тестовых сценария?(Обратите внимание на 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».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...