Кэширование данных с использованием MySQL - PullRequest
2 голосов
/ 21 июня 2011

Я хочу кешировать данные на MySQL

SET GLOBAL query_cache_size = SOME_SIZE;

Это все, что требуется для эффективного кэширования данных в MySQL?

Нужно ли добавить что-то еще для эффективного использования кэша?

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

Ответы [ 4 ]

5 голосов
/ 21 июня 2011

Я обычно не рекомендую использовать кеш запросов MySQL. В теории это звучит великолепно, но, к сожалению, не является большой победой для эффективного кэширования, потому что доступ к нему по запросам регулируется мьютексом. Это означает, что многие параллельные запросы выстраиваются в очередь, чтобы получить доступ к кешу запросов, и это вредит больше, чем помогает, если у вас много одновременных клиентов.

Это даже вредит INSERT / UPDATE / DELETE, даже если эти запросы не имеют наборов результатов, потому что они удаляют результаты запроса из кэша запросов, если обновляют те же таблицы. И эта чистка подлежит той же очереди в мьютексе.

Лучшая стратегия - использовать memcached для масштабируемого кэширования конкретных результатов запроса, но для этого необходимо подумать о том, что вы хотите кэшировать, и написать код приложения для доступа к memcached и вернуться к MySQL, если данные отсутствуют. в кеше. Это больше работы, но если вы все сделаете правильно, это даст лучшие результаты.

См. TANSTAAFL .

4 голосов
/ 21 июня 2011

Существует довольно много настроек, используемых для кэширования различных вещей в MySQL. Это хорошее руководство по оптимизации MySQL:

http://www.fromdual.com/mysql-performance-tuning-key

1 голос
/ 21 июня 2011
SHOW VARIABLES LIKE '%query_cache%';

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

1 голос
/ 21 июня 2011

Будьте осторожны, кэш запросов очень специфичен в том, что он делает:

В кеше запросов хранится текст Оператор SELECT вместе с соответствующий результат, который был отправлен клиент. Если идентичный оператор позже получен сервер извлекает результаты из запроса кеш, а не разбор и выполнить заявление снова.
http://dev.mysql.com/doc/refman/5.6/en/query-cache.html

Поэтому, если что-либо в связанных таблицах изменится или запрос будет переписан, кеш не используется. Так что select * from T where id in (1,2) и select * from T where id in (2,1) различны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...