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 години. Включення цієї опції дозволяє заощадити процесорний час для великих сайтів.

В іншому випадку таблиці новин будуть постійно оновлюватися при кожному перегляді і кеш буде неефективний.

Ось власне і все.
42