MySQL server has gone away

Metal Messiah
На сайте с 01.08.2010
Offline
163
1491

Довольно интересная проблема с cron скриптом (php, mysqli).

Общая схема работы: SELECT DISTINCT поле-ключ FROM TABLE WHERE ...

Это отрабатывает за 4 секунды. Далее

while ($row=mysqli_fetch_assoc($result))

в цикле из базы выбираются записи относящиеся к значению из 1го запроса и обрабатываются, длится это в данном случае 15 секунд, после чего в базу должны быть проведены UPDATE и DELETE запросы но они не удаются по причине MySQL server has gone away. Через 19 секунд после старта. wait_timeout стоял 30 секунд, сделал 60 - толку нет.

После подключения к БД ставлю SET session wait_timeout = 180 - результата нет. 19 секунд!

Поставил проверку if !mysqli_ping() и делаю реконнект - выдавало false, реконнект вроде как удается, последующий UPDATE запрос - ошибка. Поставил в php.ini автоматический реконнект - mysqli_ping после 18-19 секунд работы скрипта выдал true но следующий запрос опять же MySQL server has gone away

В чем может быть проблема?

anonymous, думай что говоришь и не забывай подписать отзыв :)
A9
На сайте с 04.01.2012
Offline
317
#1

Может проблема в запросе, а не в MySQL и его конфигах?

https://hstq.net - аренда серверов от 9.99$! Нет KYC! Много стран размещения на выбор! Акция - удвоим оплаченный период! Заказывайте!
Metal Messiah
На сайте с 01.08.2010
Offline
163
#2

А эта ошибка может возникать из за запроса вместо стандартной ошибки что ожидалось что-то после чего-то а получено не то?

Ок ща еще немного дебага добавлю.

p.s. в логах пусто, предел по памяти не достигается но все равно понаставил промежуточных mysqli_free_result

-------------

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

распилил частями и все прошло.

Вообще ситуация была внештатная - данные за 10 дней насобирались при том что планируется регулярная обработка поступающих данных несколько раз в сутки. Можно считать это краш тестом под нагрузкой.

A9
На сайте с 04.01.2012
Offline
317
#3

Хорошо, что все получилось)

Подобная ошибка возникает иногда из за длинных запросов, уже неоднократно сталкивались с этим)

N
На сайте с 06.05.2007
Offline
419
#4
Metal_Messiah:
ерез 19 секунд после старта. wait_timeout стоял 30 секунд, сделал 60 - толку нет.

А по-дефолту это значение - 28800.

Не надо ничего "оптимизировать" в mysql без необходимости.

Кнопка вызова админа ()
Metal Messiah
На сайте с 01.08.2010
Offline
163
#5

8 часов чтоли? У меня были случаи состояния denial of service БД по причине сотен висящих в SHOW PROCESSLIST запросов, уже не помню что и когда, но обычно такие вещи ограничиваю. Сайт должен работать быстро, если что-то подвисло оно должно мирно вылететь у одного посетителя или бота, и не влиять на остальных.

N
На сайте с 06.05.2007
Offline
419
#6

Metal_Messiah, эта настройка в описанной вами ситуации не поможет. По крайней мере не в той степени, в которой вы думаете. Запросы не останавливаются при обрыве соединения. А минус уже есть - вы попали в странную непонятную ситуацию. То есть, вообще практически никакого смысла трогать эту настройку нет.

Но ошибка покажется быстро, да.

Для ограничения нагрузки лучше обработчики php регулировать, а не mysql.

I
На сайте с 21.01.2011
Offline
82
#7

Как вариант, можно было попробовать max_allowed_packet увеличить в my.cnf

ipzon.ru (https://ipzon.ru?from=9470) - выделенные серверы, VDS/VPS и виртуальный хостинг в Москве

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий