Кэширование запросов к серверу баз данных, QuickCache и QCache

Кэширование запросов MySQL применяется довольно часто и может быть эффективно, использование кэша позволяет существенно увеличить скорость обработки запросов и оптимизировать работу приложения.

Кэширование называется QuickCache или QCache и определяется приближенно как отношение обращений к кэшу к количеству инсертов.

Кэширование запросов MySQL

 

 

Кэширование запросов MySQL и значения параметров

Существует и более полная формула:

qcache_hit_ratio = qcache_hits / (qcache_hits + qcache_inserts + qcache_not_cached)

Можно посмотреть актуальные значения, которые необходимы для расчета выполнив запрос SHOW STATUS LIKE 'Qcache%'; в консоли сервера баз данных

 

Авторизуемся в консоли MySQL

mysql -u root -p

 

Выбираем все статусы для Qcache

mysql> SHOW STATUS LIKE 'Qcache%';

+————————-+———+
| Variable_name           | Value   |
+————————-+———+
| Qcache_free_blocks      | 1336    |
| Qcache_free_memory      | 5310448 |
| Qcache_hits             | 1348276 |
| Qcache_inserts          | 181035  |
| Qcache_lowmem_prunes    | 24259   |
| Qcache_not_cached       | 62095   |
| Qcache_queries_in_cache | 3180    |
| Qcache_total_blocks     | 7783    |
+————————-+———+
8 rows in set (0.00 sec)

 

Результат деления превышающий 0.8, является хорошим. Он означает, что 80% всех запросов, обрабатываемых сером баз данных кэшируются.

Чтобы увеличить процент нужно изменить значения параметров, фигурирующих в формуле, чаще всего меняют query_cache_size. Значение можно изменить в файле /etc/mysql/my.cnf

 

Текущее значение переменной выводится в консоль следующим образом:

mysql> SHOW VARIABLES LIKE 'query_cache_size';

+——————+———-+
| Variable_name    | Value    |
+——————+———-+
| query_cache_size | 16777216 |
+——————+———-+
1 row in set (0.00 sec)

 

Как выбрать значение query_cache_size

Часто значение выбирается интуитивно. Более правильным является вычисление значения по формуле

query_cache_size = (объем трафика за 10 минут) * 1,2

Вернемся к выводу запроса SHOW STATUS LIKE 'Qcache%';

 

Сейчас нас будут интересовать значения

| Qcache_free_blocks      | 1337    |
| Qcache_free_memory      | 5268560 |
| Qcache_queries_in_cache | 3183    |
| Qcache_total_blocks     | 7793    |

 

Закэширован 3183 запрос, на каждый из них расходуется 2 блока (один из блоков используется для запроса. второй для результата). Т.е. 6366 блоков всего.

1337 блоков свободно — большое их количество означает большую степень фрагментации кэша, что является плохим показателем. Цель оптимизации данных значений, относящихся к кэшу MySQL в уменьшении Qcache_free_blocks до минимума.

 

Ошибки при настройке кэширования могут повлечь кэширование данных которые кэшироваться не должны.

 

 

Сбросить кэш MySQL

Здесь могут оказаться полезны следующие команды:

RESET QUERY CACHE;

Для очистки кэша

 

FLUSH QUERY CACHE;

Для дефрагментации кэша

 

Читайте также про оптимизацию работы MySQL при высоких нагрузках