Главная » Советы и полезное » MySQL кеширование

MySQL кеширование

  • Советы и полезное

MySQL кеширование

Дорогие друзья,
в этой статье мы хотим рассказать вам о том как можно снизить нагрузку на MySQL сервер, при этом не прибегая к настройкам самого скрипта. Речь сегодня пойдет о таких возможностях MySQL как кеширование результатов запросов. Кеширование запросов позволяет увеличить производительность веб приложений, не внося при этом каких то конструктивных изменений в сами приложения. Суть его работы состоит в том что он запоминает результаты запросов в оперативной памяти и при повторном запросе, он не выполняет запрос, а просто сразу отдает результаты из кеша. По умолчанию кеширование в MySQL отключено, поэтому включить его смогут не все, а только пользователи имеющие возможность выволнения запросов от имени суперпользователя MySQL или имеющие доступ к конфигурационным файлам MySQL сервера. Но этого и достаточно, т.к. MySQL кеширование эффективно только для высокопосещаемых проектов, а они как правило имеют VPS тарифы где доступ к настойкам есть, либо собственные сервера. Если ваш проект имеет небольшую посещаемость, то в принципе вам это не нужно, т.к. особой заметной эффективности вы не добьетесь.

MySQL содержит встроенный механизм кэширования запросов, который, не включен по умолчанию. Для получения состояния о кешировании, выполните в phpMyAdmin запрос:
show variables like 'query_cache%';


В результате вы получите таблицу примерно следующего содержания:
+-------------------------------------+---------+
| Variable_name                           | Value   |
+-------------------------------------+---------+
| query_cache_limit                     | 1048576 |
| query_cache_min_res_unit       | 4096      |
| query_cache_size                     | 0            |
| query_cache_type                    | ON        |
| query_cache_wlock_invalidate | OFF       |
+------------------------------------+---------+


где query_cache_size показывает размер оперативной памяти выделенного под кеш запросов. Для того чтобы включить кэш запросов и выделить под него 16 мегабайт памяти необходимо выполнить запрос:
SET @@global.query_cache_size=16777216;


Запрос необходимо выполнять с правами суперпользователя, а если вы хотите сделать данную настройку постоянной, следует добавить в my.cnf в подраздел [mysqld] строчку:
query_cache_size=16M.


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

Для проверки состяния кеша необходимо выполнить следующий запрос:
SHOW GLOBAL STATUS LIKE 'Qcache%';


Результатом будет таблица примерно следующего содержания:
Qcache_free_blocks           570
Qcache_free_memory        13454680
Qcache_hits                        111749
Qcache_inserts                   168162
Qcache_lowmem_prunes     0
Qcache_not_cached            38651
Qcache_queries_in_cache   1290
Qcache_total_blocks           3314


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

Внимание для эффективности MySQL кеширования в DLE необходимо в настройках скрипта в разделе оптимизации включить опцию:
Кешировать счетчик просмотров новостей
Если 'Нет', то счетчик просмотров новостей будет обновляться с каждым просмотром. Если 'Да', количество просмотров будет записываться в другую таблицу и обновляться каждые 4 часа. Включение данной опции позволяет сэкономить процессорное время для больших сайтов.


В противном случае таблицы новостей будут постоянно обновлятся при каждом просмотре и кеш будет неэффективен.

Вот собственно и все.

Автор: celsoft ( dle-news.ru )

Источник: dle-news.ru

Ключевые слова по теме MySQL кеширование: MySQL, память, кеширование, запрос, MySQL кеширование