Будет ли Sphinx хорошим решением для устранения перегрузки сервера из-за интенсивного чтения MySQL?

Будет ли Sphinx хорошим решением для устранения перегрузки сервера из-за интенсивного чтения MySQL?

Я работаю над сайтом, который, по моим подсчетам, посещают около 70 тыс. человек в день. На нем используется множество запросов, которые задействуют UNION'sоколо 45 различных таблиц. Обычно в каждой таблице содержится от 15 тыс. до 500 тыс. строк.

Мы оптимизировали все query cacheнастолько хорошо, насколько это было возможно, но всякий раз, когда одна из таблиц изменяется и данные в кэше приходится удалять, сервер начинает блокироваться, MySQL tmp dirзаполняется, нагрузка на сервер резко возрастает. Чтобы исправить эту проблему, необходимо сделать следующее:

  1. Остановить mysql (загрузка возвращается к норме)
  2. восстановить таблицы базы данных
  3. очистить кэш из mysql
  4. очистить кэш памяти
  5. восстановить таблицы базы данных снова
  6. перезапустить mysql

Я знаю, что репликация, вероятно, лучшая идея, но, вероятно, и самая дорогая. Так что интересно, если использовать Sphinxизhttp://sphinxsearch.com/очень помогло бы?

Я уже использовал его раньше для другого сайта, чтобы иметь возможность полнотекстового поиска по таблицам INNODB, поэтому немного знаю, как он работает, но не уверен, как он справится с чем-то подобным.

Использует ли он собственные методы кэширования? Не хотелось бы перейти на это и получить те же проблемы со Sphinx.

Редактировать:Ниже представлен скриншот EXPLAIN(отсутствует первая строка, возникли проблемы с программой создания скриншотов)

Обновлять:Сейчас сайт посещают всего 30 тыс. человек в день.

введите описание изображения здесь

решение1

Вам следует выявить и решить проблемы с базой данных, 70 тыс. посещений в день — это не так уж много, и MySQL способен справиться с таким объемом работы. Вам следует загрузить и использовать mysqlreportили аналогичный инструмент для анализа и настройки использования буферов MySQL MyISAM и InnoDB (я бы также рекомендовал перейти на InnoDB, если вы все еще используете MyISAM). Следующий шаг — включить ведение журнала медленных запросов в MySQL и ежедневно анализировать журнал медленных запросов с помощью pt-query-digestинструмента и EXPLAINкоманды MySQL. Вероятно, в вашей базе данных отсутствуют надлежащие индексы.

Связанный контент