Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Одновременное обращение к БД из 50 мест, возникают проблемы с соединением 
:(
    Опции темы
Xo6oT
Дата 28.9.2007, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 6.4.2007

Репутация: нет
Всего: нет



Есть приложение на php, работающее в несколько десятков потоков.
Периодически каждый поток обращается к БД (MySQL).
Изредка при коннекте к БД происходит следующее - "Lost connection to MySQL server during query" (именно при коннекте, а не во время выполнения какого-либо запроса).

Можно, конечно, в каждом потоке ловить ошибку, пробовать соединиться еще раз, если опять ошибка - опять соединяться и т.п. (типа "while(!получено_соединение) { пробуем_получить(); }" ). Но это будет сильно грузить процессор, к тому же я читал, что на установление соединения тратится много ресурсов и времени.

Может есть более рациональные варианты? Я новичок в базах данных, поэтому прошу совета, как лучше и рациональнее организовать работу с БД в моем случае. Наверняка человечество уже придумало что-то для этого случая, не хочу изобретать велосипед smile

Если можно, пример какой-нибудь схемки на пальцах smile 

ЗЫ. Пока вижу вариант держать открытыми кучу persistent-соединений (по одному на поток), но, возможно, это будет очень накладно или глючно.
PM MAIL   Вверх
comcon1
Дата 29.9.2007, 02:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

Репутация: нет
Всего: 17



а у вас случайно нет доступа к админинью базой или попросить выделить под вас столько-то коннекшнов??


--------------------
PM MAIL   Вверх
Bulat
Дата 30.9.2007, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: нет
Всего: 57



Xo6oT, держать коннект, пока процесс не закончит свою работу.
В начале процесса приконнектился, в конце отконнектился. Или проще говоря, не коннектится каждый раз перед очередным запросом. smile


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Xo6oT
Дата 2.10.2007, 08:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 6.4.2007

Репутация: нет
Всего: нет



comcon1, доступ есть, сервер выделенный.

Bulat, я так понимаю, имеются в виду постоянные соединения (типа mysql_pconnect)?
PM MAIL   Вверх
Bulat
Дата 3.10.2007, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: нет
Всего: 57



Xo6oT, угу

Т.е. в начале кода ты коннектишься к базе, потом там уже как самому удобно, либо везде как параметр таскаешь, либо еще как... Как правило в ООП, коннект создается на уровне конструктора основного класса, и соотв. потом есть доступ к переменной, которая содержит данный коннект. В конце кода дисконнект smile

Только тут надо еще и не забывать одну вещь, что при большом количестве транзакций, на одном коннекте, при обращении к одним и тем же таблицам, возможно придется блочить и т.п. Особенно актуально при инсерте....


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Xo6oT
Дата 9.10.2007, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 6.4.2007

Репутация: нет
Всего: нет



Bulat, спасибо, так и сделал.
Все вроде даже работает.

Здесь же спрошу, как правильно проверять на то, что с постоянным соединением все в порядке? (Если их 50 особенно smile )
Сейчас использую mysql_ping($link), где $link - ссылка на соединение. Если mysql_ping возвращает false, коннекчусь заново - $link = mysql_pconnect(...).
Есть подозрение, что это не совсем правильно, т.к.
1) mysql_ping возвращает false подозрительно часто (до 5 раз на 50 потоков);
2) лимита в 100 соединений mysql не хватало, пришлось увеличить, хотя потоков вроде 50.



PM MAIL   Вверх
Bulat
Дата 11.10.2007, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: нет
Всего: 57



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

Не скажу, что плохо, но тут на мой взгляд, если самому пытатся контролировать, то лучше писать на самом низком уровне, а так лишь "изобретаешь велосипед, который изобрели до тебя" smile


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0477 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.