29.09.10

Включение кэширования запросов к вашей базе данных – один из лучших способов ускорить ваше веб-приложение. Этот способ заключается в  кэшировании наиболее часто используемых SQL-запросов в память для того, чтобы мгновенно получить к ним доступ в следующий раз, когда будет задан точно такой же запрос. Причина, по которой данный метод столь эффективен, заключается в том, что не нужно как-то изменять ваше веб-приложение, вам просто нужно пожертвовать немного памяти.

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

Включение кэширования при включенном сервере.

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

Shell
1
2
3
4
5
6
mysql> show variables like 'have_query_cache';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| have_query_cache | YES |
+------------------+-------+

Да, это действительно значит, что кэширование запросов включено. К сожалению, большинство хостинг-провайдеров не включают данную функцию по умолчанию. Тем не менее, в моей свежеустановленной Ubuntu Feisty кэширование запросов было включено по умолчанию…Дальше вам необходимо проверить и посмотреть, как работает кэширование запросов. Вам необходимо проверить несколько переменных и чтобы не делать множество запросов вы можете проверить переменную query%:

Shell
1
2
3
4
5
6
7
8
9
10
11
12
mysql> show variables like 'query%';
+------------------------------+---------+
| Variable_name | Value |
+------------------------------+---------+
| query_alloc_block_ | 8192 |
| query_cache_limit | 1048576 |
| query_cache_min_res_unit | 4096 |
| query_cache_ | 8388608 |
| query_cache_type | ON |
| query_cache_wlock_invalidate | OFF |
| query_prealloc_ | 8192 |
+------------------------------+---------+

В этом списке есть несколько важных вещей и вот что они означают:

query_cache_ – это размер кэша в байтах. Если вы установите здесь значение 0, то вы просто-напросто отключите кэширование.

query_cache_type – это значение должно быть ON или 1, чтобы кэширование запросов было включено по умолчанию.

query_cache_limit – это максимальный размер запроса (в байтах), который будет кэшироваться

Если переменная query_cache_ будет иметь значение 0, или же мы просто захотим поменять ее значение, то нам нужно будет выполнить команду, которая расположена ниже. Помните, что значения этой переменной записываются в байтах. Например, если мы хотим выделить 8 мегабайт под кэш, то в качестве значения переменной мы должны указать  1024 * 1024 * 8 = 8388608:

Shell
1
SET GLOBAL query_cache_ = 8388608;

Таким же образом можно поменять и другие переменные:

Shell
1
2
SET GLOBAL query_cache_limit = 1048576;
SET GLOBAL query_cache_type = 1;

И как же теперь мы можем узнать, что все действительно работает? Мы можем использовать команды SHOW STATUS, чтобы посмотреть все переменные, которые начинаются с “Qc” и таким образом мы сможем разглядеть все внутренности:

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> SHOW STATUS LIKE 'Qc%';
+-------------------------+--------+
| Variable_name | Value |
+-------------------------+--------+
| Qcache_free_blocks | 65 |
| Qcache_free_memory | 201440 |
| Qcache_hits | 18868 |
| Qcache_inserts | 2940 |
| Qcache_lowmem_prunes | 665 |
| Qcache_not_cached | 246 |
| Qcache_queries_in_cache | 492 |
| Qcache_total_blocks | 1430 |
+-------------------------+--------+

8 rows in set (0.00 sec)В статистике вы можете заметить, что у меня очень много свободной памяти. Если ваш сервер показывает слишком большое число lowmem prunes (запросов, которые были удалены из кэша из-за нехватки памяти), то, возможно, вам следует подумать над увеличением этого значения, но я бы не тратил слишком много памяти для кэширования запросов веб-сервера. Вам нужно оставить память для Apache, PHP, Ruby или еще чего-нибудь, что вы там используете

Включение кэширования в конфигурационном файле.

Если вы хотите, чтобы эти настройки сохранились после перезагрузки компьютера или перезапуска сервера MySQL, вам необходимо добавить их в конфигурационный файл MySQL, который обычно расположен в /etc/mysql/my.cnf. Помните, что в зависимости от вашего дистрибутива, он может располагаться в другом месте файловой системы.Откройте этот файл с правами суперпользователя и добавьте в него значения, описанные ниже. Если же они уже существуют, просто раскомментируйте их.

Shell
1
2
3
query_cache_ = 268435456
query_cache_type=1
query_cache_limit=1048576

Кэширование запросов может очень сильно повысить скорость вашего веб-приложения, особенно, если его запросы к базе данных в основном завязаны на чтении. Проверяйте, как работает вышеприведенный метод и посмотрите, помогает ли он вам или нет.

Комментарии

  1. Спасибо, не знал, что можно так настраивать

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>