2013-03-30 2 views
0

Я столкнулся с проблемой с моими MySQL-запросами и надеялся, что кто-то может помочь вам.Совет по ограничению соединения с MySQL

Я разрабатываю систему на основе PHP, которая объединяет довольно много данных на разных вкладках на одной странице (tab1 = профиль, tab2 = адрес, tab3 = платежи и т. Д.), И в результате одна страница может иметь до 34/40 MySQL запросов, вытягивающих из разных таблиц или с разными критериями.

Загрузка страницы стала очень медленной, и я спросил у своего веб-хостинга, знали ли они, что не так, и они сообщили, что это из-за медленных запросов MySQL (более 2 секунд). Они также сказали, что моему пользователю MySQL разрешено только 15 подключений за раз.

Если на моей странице 40 запросов и разрешено только 15 подключений, значит ли это, что они эффективно стоят в очереди и ждут завершения? Если это так, тогда я могу понять, почему страница загружается, но я не уверен в решении. Является ли 15 MySQL запросов много или это довольно жесткое ограничение моего хоста (HostMonster)?

Кроме того, если бы 15 пользователей обращались к системе в одно и то же время, разделили бы 15 соединений между каждым из них или это 15 соединений для каждого пользователя, зарегистрированного на сайте? Я предполагаю, что они означают пользователя базы данных, но все люди, которые обращаются к системе, будут использовать одного и того же пользователя базы данных, поэтому представляется невозможным создать систему, в которой несколько пользователей могут получить доступ к одному из них?

Все соединение вещь немного смутила меня.

Заранее благодарим за любую помощь!

+1

Если страница PHP содержит 40 запросов, эти запросы будут выполняться серийно, т. Е. Следующий запрос будет выдаваться только тогда, когда предыдущий возвращается. 15 соединений означает, что 15 запросов страницы с запросами могут (теоретически) выполняться одновременно. Как только запрос страницы обрабатывается PHP, он освобождает свое соединение, поэтому он становится бесплатным для следующего запроса страницы. Я думаю, 15 соединений достаточно для небольшого веб-приложения для нескольких пользователей, но явно недостаточно для среднего и большого приложений с сотнями тысяч пользователей. – Marcellus

+0

Посмотрите, можете ли вы выполнить оптимизацию запросов с помощью 'JOIN',' GROUP BY' и подвыборов. 40 запросов на страницу интенсивны. Кроме того, посмотрите на интеграцию memcached для наборов результатов, которые не всегда будут уникальными или могут быть доступны пользователям; он позволит вам разгрузить некоторые запросы к базе данных. – msanford

ответ

2
  1. У вас есть одно соединение на страницу. Поместите запросы в последовательность
  2. Оптимизируйте эти запросы - см. Объяснение и использование индексов
  3. Возможно, объедините запросы, чтобы уменьшить сквозной put.

BTW 10+ запросов на странице чрезмерно ИМХО.

+0

Спасибо за советы, ребята! – mckeegan375

0

Если иметь максимум проблема подключения ошибки, то используйте следующую команду из командной строки

mysqladmin flush-hosts -uuser -p'password' 

это сбросит хосты, MySQL записал и будет строить список снова. В новой версии MYSQL 5.6 вы получите больше информации об этом, но не в предыдущей версии.

Вы можете установить следующие

max_connect_errors 10000 

, чтобы избежать появления сообщения появляться снова.

15 запросов или подключение не является проблемой вообще, в загруженных базах данных мы видели тысячи подключений и десятки тысяч запросов в секунду.

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