Будет ли Sphinx хорошим решением для решения проблемы завязывания сервера с интенсивным чтением MySQL?
Я работаю над сайтом, который, по моему мнению, посещает около 70 тысяч человек в день, и он использует множество запросов, которые используют UNION's
в более чем 45 различных таблицах эти таблицы обычно варьируются от приблизительно 15000 строк до приблизительно 500 000 строк в каждой таблице.
Мы оптимизировали query cache
настолько хорошо, насколько это возможно, но всякий раз, когда одна из таблиц изменяется и данные в кеше должны быть удалены, сервер начинает блокироваться, и mysql tmp dir
заполняется, и нагрузка на сервер зашкаливает, и для решения проблемы необходимо сделать следующее:
- Остановите MySQL (загрузка идет в нормальном режиме)
- восстановить таблицы базы данных
- очистить кеш от mysql
- очистить memcache
- восстановить таблицы базы данных снова
- перезапустите MySQL
Я знаю, что репликация, вероятно, лучшая идея, но, вероятно, самая дорогая. Так интересно, если использовать Sphinx
с http://sphinxsearch.com/ бы помогло?
Я использовал его раньше для другого сайта, чтобы получить полнотекстовый поиск по таблицам INNODB, поэтому немного знаю, как он работает, но не уверен, как он будет обрабатывать что-то подобное.
Использует ли он свои собственные методы кэширования? Как не хотелось бы измениться на это и все равно получить те же проблемы со Сфинксом.
Изменить: ниже скриншот EXPLAIN
(отсутствует первая строка, возникли проблемы с программой скриншота)
Обновление: сайт получает только 30 человек в день.
1 ответ
Вы должны определить и решить проблемы с базой данных, 70 000 посещений в день - это не так много, и MySQL способен справиться с таким объемом работы. Вы должны скачать и использовать mysqlreport
или аналогичный инструмент для анализа и настройки использования буферов MySQL MyISAM и InnoDB (я также рекомендовал бы переключиться на InnoDB, если вы все еще используете MyISAM). Следующий шаг - включить медленную регистрацию запросов в MySQL и ежедневно анализировать медленный журнал запросов, используя pt-query-digest
инструмент и EXPLAIN
MySQL команда. Вероятно, в вашей базе данных отсутствуют правильные индексы.