![]() |
|
Модераторы: skyboy |
![]()
|
|
| Xo6oT |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 6.4.2007 Репутация: нет Всего: нет |
Есть приложение на php, работающее в несколько десятков потоков.
Периодически каждый поток обращается к БД (MySQL). Изредка при коннекте к БД происходит следующее - "Lost connection to MySQL server during query" (именно при коннекте, а не во время выполнения какого-либо запроса). Можно, конечно, в каждом потоке ловить ошибку, пробовать соединиться еще раз, если опять ошибка - опять соединяться и т.п. (типа "while(!получено_соединение) { пробуем_получить(); }" ). Но это будет сильно грузить процессор, к тому же я читал, что на установление соединения тратится много ресурсов и времени. Может есть более рациональные варианты? Я новичок в базах данных, поэтому прошу совета, как лучше и рациональнее организовать работу с БД в моем случае. Наверняка человечество уже придумало что-то для этого случая, не хочу изобретать велосипед Если можно, пример какой-нибудь схемки на пальцах ЗЫ. Пока вижу вариант держать открытыми кучу persistent-соединений (по одному на поток), но, возможно, это будет очень накладно или глючно. |
|||
|
||||
| comcon1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 11.6.2005 Где: Москва ДАС-МГУ Репутация: нет Всего: 17 |
а у вас случайно нет доступа к админинью базой или попросить выделить под вас столько-то коннекшнов??
|
|||
|
||||
| Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: нет Всего: 57 |
Xo6oT, держать коннект, пока процесс не закончит свою работу.
В начале процесса приконнектился, в конце отконнектился. Или проще говоря, не коннектится каждый раз перед очередным запросом. -------------------- менеджер по кодеврайтингу |
|||
|
||||
| Xo6oT |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 6.4.2007 Репутация: нет Всего: нет |
comcon1, доступ есть, сервер выделенный.
Bulat, я так понимаю, имеются в виду постоянные соединения (типа mysql_pconnect)? |
|||
|
||||
| Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: нет Всего: 57 |
Xo6oT, угу
Т.е. в начале кода ты коннектишься к базе, потом там уже как самому удобно, либо везде как параметр таскаешь, либо еще как... Как правило в ООП, коннект создается на уровне конструктора основного класса, и соотв. потом есть доступ к переменной, которая содержит данный коннект. В конце кода дисконнект Только тут надо еще и не забывать одну вещь, что при большом количестве транзакций, на одном коннекте, при обращении к одним и тем же таблицам, возможно придется блочить и т.п. Особенно актуально при инсерте.... -------------------- менеджер по кодеврайтингу |
|||
|
||||
| Xo6oT |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 6.4.2007 Репутация: нет Всего: нет |
Bulat, спасибо, так и сделал.
Все вроде даже работает. Здесь же спрошу, как правильно проверять на то, что с постоянным соединением все в порядке? (Если их 50 особенно Сейчас использую mysql_ping($link), где $link - ссылка на соединение. Если mysql_ping возвращает false, коннекчусь заново - $link = mysql_pconnect(...). Есть подозрение, что это не совсем правильно, т.к. 1) mysql_ping возвращает false подозрительно часто (до 5 раз на 50 потоков); 2) лимита в 100 соединений mysql не хватало, пришлось увеличить, хотя потоков вроде 50. |
|||
|
||||
| Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: нет Всего: 57 |
Xo6oT, не знаю, на чем ты пишешь, но как правило драйвера во всех языках сами контролируют соединение, при потере сами делают реконнект....
Не скажу, что плохо, но тут на мой взгляд, если самому пытатся контролировать, то лучше писать на самом низком уровне, а так лишь "изобретаешь велосипед, который изобрели до тебя" -------------------- менеджер по кодеврайтингу |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MySQL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |