2012-01-28 1 views
2

Совсем недавно я начал получать ограничение на максимальные пользовательские соединения SQL max. Я связался с моим хостом и получил уведомление, что мой лимит - 10 одновременных подключений одновременно. Но SQL занимает центральное место на моем сайте, поэтому вместо ошибки я хочу, чтобы код продолжал пытаться подключиться, пока запрос не будет успешным.«Максимальный уровень пользовательских подключений» - как убедиться, что соединение установлено?

Как это сделать в PHP?

EDIT: Вот что я делаю для звонков AJAX для извлечения данных для клиента. Каждый вызов AJAX, хотя ему требуется ~ 400 миллисекунд, открывает новое соединение MySQL. С 10 или более пользователями я сталкиваюсь с проблемами.

+0

Вы приближаетесь к этому неправильно. Закройте старые подключения или используйте одно соединение для выполнения всей вашей работы. –

+0

Вы что-то пробовали? –

+0

http://stackoverflow.com/questions/39753/connection-pooling-in-php – sherif

ответ

1

Почему бы вам не попробовать использовать постоянные соединения?

Если у вас есть подключение к базе данных, чтобы ваша страница работала, вы должны заблокировать ее до тех пор, пока соединение не будет установлено. Это лучше всего реализовать, имея пул из десяти соединений и разделяя их среди всех экземпляров вашей страницы.

Это имеет дополнительное преимущество, заключающееся в снижении стоимости соединения в первую очередь, поскольку сделано меньше соединений и соединений.

Вы не сказали, какой двигатель БД вы использовали, но mysql_pconnect - один из таких вызовов PHP.

EDIT: после прочтения других ответов стоит отметить, что вы никогда не должны использовать более одного соединения на каждую страницу. Я предполагаю, что вы уже используете только одну загрузку на страницу, но у вас более десяти одновременных экземпляров PHP.

+0

Я использую INNODB в качестве моего механизма хранения. Как мне сделать пул соединений? – user1137403

+0

@ user1137403 http://php.net/mysql_pconnect – Borealid

+0

Итак, у меня есть 6 разных файлов PHP, которые вызываются разными вызовами AJAX для извлечения разных данных. Итак, следуя вашему предложению, я хотел бы открыть 10 постоянных соединений и поделиться ими? Как я могу «поделиться»? – user1137403

1

Для начала закрывайте соединения, когда вы закончите с ними, чтобы они не оставались открытыми до конца сценария.

Лучшее решение состоит в том, чтобы просто использовать одно соединение для выполнения всей вашей работы.

Используйте PDO и передайте объект PDO вокруг по мере необходимости. Одно соединение, несколько операций.

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