2013-12-05 2 views
0

У меня много cronjob (50 -100), которые все начинаются в одно и то же время. (Обновление данных для каждого отдельного клиента.) За один час работы требуется много разных заданий, поэтому я не могу различать время работы. И я решил не создавать цикл, но отдельные задания - чтобы избежать возможных ошибок, влияющих на обновления других.Codeigniter и слишком много соединений с базами данных? (Невозможно подключиться ...)

Сначала все было нормально - но теперь - имея около 100 клиентов - почти 30% рабочих мест в конечном итоге с

 
A Database Error Occurred 
Unable to connect to your database server using the provided settings. 
Filename: core/Loader.php 
Line Number: 346 

Но макс. подключения mySQL: NOT. Я уже пытался переключиться между connect и pconnect, но это не влияет.

Любая идея, где узкое место? И как этого избежать?

+0

Какой драйвер вы используете? – Daniel

+0

Вы имеете в виду это? '$ db ['live'] ['dbdriver'] = 'mysql'; ' – Petra

+0

Вы закрываете соединения на рабочих местах? – user2486495

ответ

0

Максимальное подключение по умолчанию установлено на 150. Если у вас есть 100 клиентов и от 50 до 100 cronjob, которые выполняют запросы к базе данных, я достигаю 100 * 100 = не менее 10 000 подключений. Если у вас есть 10 000 подключений одновременно, вы можете получить странные ошибки, например, тайм-ауты или проблемы параллелизма (один скрипт блокирует таблицу, а другой пытается получить доступ, это не должно давать сообщение об ошибке неспособности, но в некоторых случаях это делает). Вы можете попытаться связать запросы.

Что происходит, если вы поднимаете максимальные соединения до 400 или около того? Уменьшает ли количество или ошибки?

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

Edit: Codeigniter закрывает соединения для вас, но вы можете сделать это также вручную с помощью

$this->db->close();

+0

Изменение драйвера для mysqli вместо mysql, похоже, исправлено. Но thx для ссылки - я посмотрю на это. (Кроме того: максимальные соединения никогда не были достигнуты. Таким образом, соединения mysql, похоже, не являются проблемой ....) – Petra

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