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