Как выяснилось, MySQL содержит встроенный механизм кэширования запросов, который, однако не включен по умолчанию.
Проверить какие параметры кэширования выставленны по умолчанию, можно с помощью следующего запроса:
mysql> 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 |
+------------------------------+---------+
Чтобы выделить под кеширование 32Мб оперативной памяти на лету, м ожно выполнить следующий запрос:
set @@global.query_cache_size=32*1024*1024;
чтобы данная настройка не слетала при перезагрузке, необходимо добавить в my.cnf в подраздел [mysqld] строчку
query_cache_size=32M
Проверим текущее состояние кэша:
mysql> SHOW GLOBAL STATUS LIKE ‘Qcache%’;
+-------------------------+----------+
| Variable_name | Value |
+-------------------------+----------+
| Qcache_free_blocks | 973 |
| Qcache_free_memory | 14282000 |
| Qcache_hits | 3293750 |
| Qcache_inserts | 252819 |
| Qcache_lowmem_prunes | 0 |
| Qcache_not_cached | 66645 |
| Qcache_queries_in_cache | 1342 |
| Qcache_total_blocks | 3709 |
+-------------------------+----------+
8 rows in set (0.00 sec)
Qcache_free_memory – объем свободной памяти, отведенной под кэш.
Qcache_hits – количество запросов, отработанных из кэша.
Qcache_inserts – количество вставок запросов в кэш.
Qcache_lowmem_prunes – количество высвобождений памяти из-за наполненности кэша.
Qcache_not_cached – количество запросов, не подлежащих кэшированию.
Qcache_queries_in_cache – количество запросов, находящихся в кэше в настоящее время.
Мерой эффективности кэша может служить отношение
Qcache_hits / (Qcache_inserts + Qcache_not_cached)
25 069 / (11 196 + 916) = 2.06976552 (каждый второй запрос выполняется из базы)
3 293 750 / (252 819 + 66 645) = 10.3102384 (каждый 10 запрос выполняется из базы)