Как вручную построить MySQL кеш - PullRequest
1 голос
/ 10 июня 2010

У меня есть таблица из более чем 150 000 строк, большинство из которых будут обновляться ежедневно. У меня включено кэширование mysql, поэтому страницы загружаются быстрее, однако каждый раз, когда база данных обновляется, страницы снова загружаются медленно, что, я полагаю, само по себе снова строит кеш.

Итак, на данный момент я прибегнул к выполнению wget -m --delete-after http://localhost/ на сервере, однако это занимает около 4 часов и перемещается примерно в 13 гигабайт.

Есть ли лучший способ сделать это?

Ответы [ 2 ]

4 голосов
/ 10 июня 2010

Кэш MySQL работает по-разному, в зависимости от того, используете ли вы механизм хранения MyISAM или механизм хранения InnoDB.

MyISAM кэширует только индексы, а не данные. Вы можете использовать LOAD INDEX INTO CACHE для предварительной загрузки индексов MyISAM в буферный кеш ключа. Но нет эквивалентного утверждения, если вы используете InnoDB.

InnoDB кэширует как страницы данных, так и страницы индекса. Нет специальной команды для разогрева буферов кеша, но вы можете выполнить несколько операторов SQL, которые выполняют полное сканирование таблицы и полное сканирование индекса, чтобы загрузить их в буферы. Вы должны быть в состоянии сделать это, используя скрипт на сервере, не прибегая к wget!

Я согласен с ответом @code_burgar: 150 тыс. Строк достаточно мало, чтобы не замечать значительного снижения производительности во время прогрева кеша.

Если вы говорите о прогреве Query Cache , это другая проблема. Вам придется прогреть кэш запросов, используя конкретные запросы SQL, поскольку этот кэш хранит наборы результатов, дословно связанные с этими запросами SQL. Ваше wget решение неэффективно и, вероятно, дублирует большую работу. Вы должны быть в состоянии заполнить кэш запросов, запустив скрипт на сервере, который выполняет каждый запрос, который вы хотите кэшировать один раз .

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

1 голос
/ 10 июня 2010

150000 строк действительно мало с точки зрения размера таблицы.

Правильно ли проиндексирована ваша таблица?

Как вы делаете обновление, планируете и / или ограничиваете обновления или просто отпускаете все сразу?

Скорее всего, замедление происходит из-за того, что вы пытаетесь обновить слишком много строк одновременно, чтобы сервер перевел дыхание.Попробуйте регулировать обновления.

...