• DONATE to NULLED!
    Форуму и его команде можно помочь, мотивировать модераторов разделов.
    Помогите модератору этого раздела killoff лично.

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

Статус
В этой теме нельзя размещать новые ответы.

g-prime

איך בין גאָט
Регистрация
11 Авг 2008
Сообщения
759
Реакции
1.081
В этой статье мы хотим рассказать вам о том как можно снизить нагрузку на 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] строчку:



и перезапустить 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
 
  • Заблокирован
  • #2
Если у вас 20k новостей и сколько же пользователей, то это очень снизит нагрузку
 
нормальные сервера это имеют и так.
рам / 4(6) = ...

там уже роль играет только рам и цпу.

Лутшеб он уже давно перешол на Innodb..

но изза похожих новостей (хака) там где FULL TEXT не может перейти...

Так же давно пора ему познать и правельный UTF а не из фигни в слона конвентировать
 
Вот если бв кто то взялся и нормальное кеширование сделал .. например есть компонент для joomla .... там можно настроить кеширование каждого модуля и даже блоков..
А в дле кеширование - фиговое.. и при 30 к новостей ... серваку просто жарко становится... такие объемы даже не для VPS
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху