В данной статье мы желаем поведать вам о том как можно понизить нагрузку на MySQL сервер, при всем этом не прибегая к настройкам самого скрипта. Речь сейчас пойдет о таковых способностях MySQL как кеширование результатов запросов. Кеширование запросов дозволяет прирастить производительность интернет приложений, не внося при всем этом каких то конструктивных конфигураций в сами приложения. Суть его работы состоит в том что он запоминает результаты запросов в оперативной памяти и при повторном запросе, он не выполняет запрос, а просто сходу дает результаты из кеша. По умолчанию кеширование в MySQL отключено, потому включить его сумеют не многие, а лишь юзеры имеющие возможность выволнения запросов от имени суперпользователя MySQL либо имеющие доступ к конфигурационным файлам MySQL сервера. Но этого и довольно, т.к. MySQL кеширование отлично лишь для высокопосещаемых проектов, а они обычно имеют VPS тарифы где доступ к настойкам есть, или собственные сервера. Ежели ваш проект имеет небольшую посещаемость, то в принципе вам это не нужно, т.к. особенной заметной эффективности вы не добьетесь.
В итоге вы получите таблицу приблизительно последующего содержания:
+-------------------------------------+---------+
| 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 мб памяти нужно выполнить запрос:
Запрос нужно делать с правами суперпользователя, а ежели вы желаете сделать данную настройку неизменной, следует добавить в my.cnf в подраздел [mysqld] строку:
и перезапустить MySQL сервер. Ежели у вас достаточный резерв оперативной памяти, то размер кеша можно прирастить. Но об этом трудно судить сходу опосля включения кеша, о необходимости прирастить кеш можно судить приблизительно спустя день послеего включения, но об этом я расскажу ниже.
Для проверки состяния кеша нужно выполнить последующий запрос:
Результатом будет таблица приблизительно последующего содержания:
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 часа. Включение данной функции дозволяет сэкономить процессорное время для огромных страниц.
В неприятном случае таблицы новостей будут постоянно обновлятся при каждом просмотре и кеш будет неэффективен.
Вот фактически и все.
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 13454680Qcache_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 часа. Включение данной функции дозволяет сэкономить процессорное время для огромных страниц.
В неприятном случае таблицы новостей будут постоянно обновлятся при каждом просмотре и кеш будет неэффективен.
Вот фактически и все.
