Как вручную построить MySQL кеш
У меня есть таблица из более чем 150000 строк, большинство из которых будут обновляться ежедневно. У меня включено кэширование mysql, поэтому страницы загружаются быстрее, но каждый раз, когда база данных обновляется, страницы снова загружаются медленно, что, я полагаю, само по себе снова строит кэш.
Так что на данный момент я прибегнул к wget -m --delete-after http://localhost/
на сервере, однако, это занимает около 4 часов и перемещается примерно на 13 гигабайт.
Есть лучший способ сделать это?
2 ответа
Кэш MySQL работает по-разному в зависимости от того, используете ли вы механизм хранения MyISAM или механизм хранения InnoDB.
MyISAM кэширует только индексы, а не данные. Ты можешь использовать LOAD INDEX INTO CACHE
предварительно загрузить индексы MyISAM в буферный кеш ключа. Но нет эквивалентного утверждения, если вы используете InnoDB.
InnoDB кэширует как данные, так и страницы индекса. Нет специальной команды для разогрева буферов кеша, но вы можете выполнить несколько операторов SQL, которые выполняют полное сканирование таблицы и полное сканирование индекса, чтобы загрузить их в буферы. Вы должны быть в состоянии сделать это, используя скрипт на сервере, не прибегая к wget
!
Я согласен с ответом @code_burgar: 150k строк достаточно мало, чтобы вы не заметили значительного снижения производительности во время прогрева кеша.
Если вы говорите о разогреве кеша запросов, это другая проблема. Вам придется прогреть кеш запросов, используя конкретные запросы SQL, поскольку этот кэш хранит наборы результатов, дословно связанные с этими запросами SQL. Ваш wget
Решение неэффективно и, вероятно, дублирует много работы. Вы должны быть в состоянии заполнить Query Cache, запустив скрипт на сервере, который выполняет каждый запрос, который вы хотите кэшировать один раз.
Но вам может потребоваться выполнить анализ кода, чтобы выяснить, что это за запросы, и периодически обновлять сценарий предварительной загрузки кеша, если ваш код изменяется.
150000 строк действительно мало с точки зрения размера таблицы.
Ваша таблица правильно проиндексирована?
Как вы делаете обновление, планируете и / или ограничиваете обновления или просто отпускаете все сразу?
Замедление, скорее всего, происходит из-за того, что вы пытаетесь обновить слишком много строк одновременно, чтобы сервер перевел дыхание. Попробуйте регулировать обновления.