2014-01-14 5 views
2

В последнее время я ничего не менял в этой ситуации, но в последнее время мой mysqli_connect() на удаленном сервере работает очень медленно (примерно в половине случаев, когда он достигает 30-секундного максимального времени выполнения). Когда это работает, время отклика составляет от 28 до 30 секунд.mysqli_connect() внезапно чрезвычайно медленный

Я перезапустил MySQL на обоих серверах. Сервер, содержащий скрипт PHP, является локальным WAMP-сервером, удаленный сервер - стек LAMP. Сервер LAMP отлично выполняет ту же информацию, что запрашивает сервер WAMP. Запросы, похоже, не будет проблемой, вместо этого он выглядит как mysqli_connect() проблема:

$mtime = microtime(); 
    $mtime = explode(" ",$mtime); 
    $starttime = $mtime[1] + $mtime[0]; 
     $this->conn = mysqli_connect($this->host,$this->user,$this->password) or die(mysqli_error($this->conn)); 
     $etime = microtime(); 
    $etime = explode(" ",$etime); 
    $endtime = $etime[1] + $etime[0]; 
    $totaltime = ($endtime - $starttime); 
    echo('<!--mysqli_connect took: '.$totaltime.' seconds-->'); 

страница (если она не дает 500 ответ для удара max_execution_time) покажет:

<!--mysqli_connect took: 28.975151777267 seconds--> 

Тот же самый код на удаленном сервере ЛАМПЫ будет показывать:

<!--mysqli_connect took: 0.036190032958984 seconds--> 

Я не обновлял этот код или какое-либо изменение конфигурации, так как это работает. Я не получаю ошибок на любом сервере, кроме превышения max_execution_time, если на сервере WAMP прошло 30 секунд. У кого-нибудь есть предложения?

Спасибо за чтение.

+0

У вас есть достаточное количество доступных соединений на сервере для удовлетворения потребностей в соединениях? Или есть, возможно, какой-то длинный запрос, который вызывает запросы/подключения? –

+0

Через 10 минут после перезапуска: 'max_connections' установлен на 151, pma показывает' max. одновременные соединения на 6, а 'threads_connected' равно 3, а' threads_created' равно 23. В журнале не регистрировались медленные запросы. Мой mysqli_connect по-прежнему занимает> 30 секунд даже после перезагрузки. –

+0

mysqltuner показывает Наивысшее использование доступных подключений: 5% (9/151) –

ответ

4

Возможно, проблема с DNS? Вы пытались изменить строку хоста на прямой IP-адрес, а не на домен? Здесь был аналогичный вопрос: Connecting to mysql server(localhost) very slow, который звучал аналогично, однако это был локальный хост и изменился на 127.0.0.1, исправил проблему.

+0

Я пробовал IP по вашему предложению, и время не менялось. Изменение имени хоста на сервере LAMP для использования 'localhost', а не имени домена уменьшило время ответа от 0,03 до 0,0002. Я предполагаю, что это не проблема DNS, поскольку я использовал одно и то же имя хоста на обоих серверах (не используя localhost или 127.0.0.1 для сервера LAMP). Спасибо за ваше предложение. –

+0

Sarah - Я действительно стреляю в дартс, но вот что-то другое, что могло бы вызвать проблему (хотя время, о котором вы говорите, намного больше, чем этот): http://stackoverflow.com/ Вопросы/13439817/why-is-my-mysqli-connection-so-slow –

+0

Да, похоже, что это для замедления для локального сервера MySQL (мое соединение с localhost работает отлично). Это также проблема для Windows 7 и более поздних версий, и я использую Linux и более старую версию Windows Server. –

0

Обнаружена проблема, и это связано с DNS. Тем не менее, я все еще не совсем понимаю. Похоже, демон named был остановлен на сервере LAMP. Этот сервер является авторитетным NS для имени домена, которое я использовал для подключения. Я не знаю, почему он работал иногда, или почему это не сработало, когда я использовал IP-адрес, но теперь он отлично работает, и я снова начал службу.

Благодарим за оказанную помощь.

+0

Это потому, что сервер MySQL ищет DNS клиентов. Вы также можете [отключить] (http: //developer.sugarcrm.com/2012/01/10/howto-turn-off-mysql-reverse-dns-lookup-to-speed-up-response-times /) он в конфигурации сервера. – spacediver

+0

IP-адрес сервера WAMP не контролируется сервером LAMP, а нашим провайдером - поэтому я не думаю, что проблема была связана с невозможностью найти сервер LAMP для получения информации о IP-адресе клиента. Я ценю ссылку, хотя. –

+1

Ну, ради правильности;) - сервер MySQL будет искать DNS-имена подключающихся клиентов, где бы эти клиенты не получали свои IP-адреса. Я считаю, что это мотивировано более подробным протоколированием и отображением связи, возможно. Из вашего решения я вижу, что после включения именования решалась задержка, поэтому сервер MySQL активно его использует. Более того, если по какой-либо причине вы начнете получать задержки с задержкой по имени, эти задержки также будут распространяться на MySQL. Я не вижу причин, чтобы этот поиск (и зависимость службы!) Был настроен вообще. :) – spacediver

Смежные вопросы