Ноя 02 2009

MySQL. Кеш запросов.

Переодически встречаюсь с серверами на которых при, казалось бы, незначительной нагрузке все тормозит. Одной из причин, зачастую является, отключенный кеш запросов MySQL. Это тот кеш, куда MySQL при выполнении запроса, помещает готовый ответ. И, если у вас на сайте выполняется регулярно один и тот же запрос, то при работе MySQLю, не нужно будет рыться по всем индексам и таблицам, собирая этот сложный запрос, он будет готовым находится в памяти.
Для того, что бы проверить включен или нет кеш, нужно подключится к MySQL и запрос:

show variables like 'query_cache%';


если вы видите такой вывод:

+------------------------------+----------+
| Variable_name                | Value    |
+------------------------------+----------+
| query_cache_limit            | 1048576  | 
| query_cache_min_res_unit     | 4096     | 
| query_cache_size             | 16777216 | 
| query_cache_type             | ON       | 
| query_cache_wlock_invalidate | OFF      | 
+------------------------------+----------+

то кеш включен.
Если же вы увидите такие цифры:

+------------------------------+---------+
| 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=0, то кешировать некуда.
Что бы указать размер памяти для кеширования, внесите в my.cnf:

query_cache_size=32M

Теперь для того, что бы увидеть, как используется наш кеш, можно выполнить запрос:

show global status like 'Qcache%';

при включенном кеше, результаты будут примерно такие:

+-------------------------+----------+
| Variable_name           | Value    |
+-------------------------+----------+
| Qcache_free_blocks      | 828      | 
| Qcache_free_memory      | 14387096 | 
| Qcache_hits             | 209610   | 
| Qcache_inserts          | 50198    | 
| Qcache_lowmem_prunes    | 0        | 
| Qcache_not_cached       | 277      | 
| Qcache_queries_in_cache | 1660     | 
| Qcache_total_blocks     | 4206     | 
+-------------------------+----------+

В этих цифрах, видно, что Qcache_hits больше нуля и соответственно чем выша эта цифра, тем больше запросов проходят через кеш.

Добавить в закладки:

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru
  • By Jonny, 12.05.2010 @ 10:11

    Для включения кеша «на лету» можно залогинившись в базу с правами root пользователя дать комманду
    set @@global.query_cache_size=256*1024*1024;
    для указания 256М кеша.

Other Links to this Post


Украинская Баннерная Сеть