MySQL Performance Blog - фантастический ресурс. А именно, этот пост охватывает основы правильной настройки специфичных для InnoDB параметров.
Я также обнаружил, что PDF-версия Справочного руководства MySQL очень важна. Глава 7 посвящена общей оптимизации , а - раздел 7.5 - оптимизации для конкретного сервера, с которыми вы можете играть.
Судя по звуку вашего сервера, кэш запросов может иметь для вас значение IMMENSE.
В справочном руководстве также содержатся подробные сведения о медленных запросах, кэшах, оптимизации запросов и даже анализе поиска по дискам с помощью индексов.
Может быть, стоит потратить время на репликацию с несколькими хозяевами, что позволит вам полностью заблокировать один сервер и запустить OPTIMIZE / ANALYZE, не снижая при этом производительность (поскольку 95% ваших запросов считываются, другой сервер может управлять пишет просто отлично).
Раздел 12.5.2.5 подробно описывает OPTIMIZE TABLE, а 12.5.2.1 подробно описывает ANALYZE TABLE.
Обновление для ваших правок / выделений:
Вопрос № 2 легко ответить. Из справочного руководства:
ОПТИМИЗАЦИЯ:
OPTIMIZE TABLE следует использовать, если вы удалили большую часть таблицы или если вы внесли много изменений в таблицу со строками переменной длины. [...] Вы можете использовать OPTIMIZE TABLE, чтобы освободить неиспользуемое пространство и дефрагментировать таблицу данных.
И АНАЛИЗ:
ANALYZE TABLE анализирует и сохраняет распределение ключей для таблицы. [...] MySQL использует распределение хранимых ключей, чтобы определить порядок, в котором таблицы должны объединяться, когда вы выполняете соединение с чем-то, кроме константы. Кроме того, распределение ключей может использоваться при принятии решения о том, какие индексы использовать для конкретной таблицы в запросе.
OPTIMIZE хорошо работать, когда у вас есть свободное время. MySQL хорошо оптимизирует работу с удаленными строками, но если вы идете и удаляете 20 ГБ данных из таблицы, то может быть хорошей идеей для запуска этого. Это определенно не требуется для хорошей производительности в большинстве случаев.
АНАЛИЗ гораздо важнее. Как уже отмечалось, наличие необходимых табличных данных, доступных для MySQL (предоставляемых с ANALYZE), очень важно, когда речь идет о любом запросе . Это то, что должно выполняться на общей основе.
Вопрос № 1 - немного больше трюка. Я бы очень внимательно следил за сервером, когда это происходит, а именно за дисковым вводом / выводом Держу пари, что ваш сервер перегружает ваш кеш подкачки или (InnoDB). В любом случае это может быть запрос, настройка или загрузка. Неоптимизированные таблицы могут быть причиной этого. Как уже упоминалось, запуск ANALYZE может значительно повысить производительность и, вероятно, тоже поможет.