Недавно я начал получать ошибки MySQL «слишком много соединений» во время большого трафика. Мое приложение rails работает на кластере mongrel с двумя экземплярами на общем хосте. Некоторые недавние изменения, которые могут привести к этому:
- Увеличился трафик на мой сайт. я
в настоящее время в среднем около 4 тыс. страниц
день.
- Размер базы данных увеличился. Моя самая большая таблица имеет ~ 100К строк.
Некоторые ассоциации могут вернуться
несколько сотен экземпляров в
наихудший случай, хотя большинство гораздо меньше.
- Я добавил некоторые функции, которые
увеличил количество и размер
вызовы базы данных в некоторых действиях.
Я сделал обзор кода, чтобы уменьшить количество обращений к базе данных, оптимизировать запросы SQL, добавить недостающие индексы и использовать: include для быстрой загрузки. Однако многие из моих методов по-прежнему выполняют 5-10 отдельных вызовов SQL. У большинства моих действий время отклика составляет около 100 мс, но одно из моих наиболее распространенных действий составляет в среднем 300–400 мс, а некоторые действия случайным образом достигают максимума более 1000 мс.
Журналы мало помогают, так как ошибки кажутся случайными или, по крайней мере, шаблон не связан с вызываемыми действиями или доступом к данным.
Могу ли я устранить ошибку, добавив дополнительные экземпляры монгрел? Или соединения mySQL ограничены сервером и, следовательно, не связаны с количеством процессов, на которые я делю трафик?
Это, скорее всего, проблема с моим кодированием, или я должен нажимать на свой хост для большей емкости / меньшей нагрузки на общем сервере?