Падения MySQL

nocomments
На сайте с 12.11.2009
Offline
176
1297

История и простой вопрос в формате «просто поговорить» на нубском уровне. Пусть тут на форуме будут эти ключевички ))

Debian7. Начал падать mysql. Просто так: нагрузки особой нет, в логах ничего особенного. В какой-то момент просто начинает отказывать в соединении. Посещаемость сайта около 20-30К в сутки, настроена репликация, это мастер. Работал до этого месяцы/годы, и вдруг именно сейчас начал так как-бы падать. Перезагрузка mysql, после этого работает нормально от часа до трёх.

Почему как-бы: установлен Monit, он проблему не улавливает. Вот если сделать ошибку в my.cnf и mysql не запустится - monit будет пытаться перезапустить. Т.е. процесс mysql не выгружается, но нормально работать перестаёт.

В логе только куча предупреждений о том, что binlog-format херовый, но это давно, с самого начала и ранее не мешало. Вот таких: [Warning] Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Ну хорошо, поменял на binlog-format=ROW. Нет, не оно, ворнинги пропали, падения остались.

Прочитал на заграничных форумах, что такие падения могут быть от слишком высоких лимитов в настройках базы. Пишут, типа линукс выделяет память неглядя за пределами физической. Памяти на сервере 32G, htop редко показывает выше 15-20%. Стояло по гигу-полтора на кеш таблиц, запросов, сотритровок. Уменьшил до "приличных" цифр. Нет, тоже не оно.

Изучил медленные запросы и запросы без индексов, что-то подправил, количество в медленных сократилось раза в 2. Полезно в любом случае, но на падения влияния не оказало.

И вот сегодня утром, раскомментировал строку max-connections и вписал туда 1024. 8 часов, полёт нормальный. Наблюдаю. Чё, серьёзно? Mysql не умеет ставить запросы в очередь или надо было в первую очередь лезть в это?

Это счастливая рефка: {жать сюда} (http://bit.ly/WbMR4O) тому, кто по ней разместит больше всего статей, будет сопутствовать счастье всю его оставшуюся, длинную, обеспеченную жизнь.
VK
На сайте с 29.12.2011
Offline
42
#1

nocomments, посмотрите что у вас неправильно закрывает соединения с базой данных или держит их. 1024 при неправильных остальных настройках так же может быть опасно.

Еще то, что что-то держит соединение с базой может быть признаком какой-то другой проблемы. Для выяснения причин нужно смотреть код и поведение сервера/графики, просто так сказать что-то более детальное сложно.

A
На сайте с 19.07.2010
Offline
130
#2

Запустите mysqltuner - будет виднее.

.............
K5
На сайте с 21.07.2010
Offline
209
#3

с жесткими дисками все в порядке?

аська 45два48499два записки на работе (http://memoryhigh.ru) помогу с сайтом, удалю вирусы, настрою впс -> отзывы ТУТ (/ru/forum/836248) и ТАМ (http://www.maultalk.com/topic140187.html) !!!всегда проверяйте данные людей, которые сами пишут вам в аську или скайп!!!
H
На сайте с 05.05.2015
Offline
61
#4
nocomments:
max-connections и вписал туда 1024. 8 часов, полёт нормальный. Наблюдаю. Чё, серьёзно? Mysql не умеет ставить запросы в очередь

Как раз таки это и есть очередь, и её длинна :)

Смотрите активные запросы mysql (# mysqladmin processlist )

Убедитесь скорей всего в том, что Ваше приложение не закрывает соединение с базой, от чего очередь накапливается до того момента, пока количество активных подключений не превысит максимальное значение "max-connections"

Также в топике верно подметили, что нужно искать причину, а не повышать лимиты, ибо когда память кончится и сервер уйдёт в swap, будет ситуация не лучше, чем ошибка подключения к mysql

А если это OpenVZ контейнер, то и вовсе OOM Killer прибъёт процесс mysql, от чего могут и таблички "попортиться"

nocomments
На сайте с 12.11.2009
Offline
176
#5

Диски окей. В итоге так и нет больше ошибок.

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