Ускорьте свой веб-сайт с MySQL Query Caching
Один из лучших способов ускорить работу вашего веб-приложения - включить кэширование запросов в вашей базе данных, которое кэширует часто используемые запросы SQL в памяти для практически мгновенного доступа к следующей странице, которая выполняет тот же запрос..
Причина того, что этот метод является настолько мощным, заключается в том, что вам не нужно вносить какие-либо изменения в ваше веб-приложение, вам просто нужно пожертвовать небольшим объемом памяти. Это не решит всех ваших проблем, но определенно не повредит.
Примечание: если ваше приложение обновляет таблицы часто, то кэш запросов будет постоянно очищаться, и вы не получите много или никакой выгоды от этого. Это идеально подходит для приложения, которое в основном читает по базе данных, такого как блог WordPress. Это также не будет работать, если вы работаете на виртуальном хостинге.
Включить кеширование при работающем сервере
Первое, что вам нужно сделать, это убедиться, что ваша установка MySQL действительно имеет поддержку кэширования запросов. Большинство дистрибутивов делают, но вы все равно должны проверить.
Вы захотите запустить эту команду из консоли MySQL, которая сообщит вам, доступно ли кэширование запросов..
mysql> показывать переменные вроде 'have_query_cache'; + ------------------ + ------- + | Переменное_имя | Значение | + ------------------ + ------- + | have_query_cache | ДА | +------------------+-------+
Не путайте это с тем, что кэширование запросов действительно включено, потому что большинство хостинг-провайдеров не собираются включать это по умолчанию. Как ни странно, моя установка Ubuntu Feisty уже была включена…
Далее нам нужно проверить и посмотреть, включено ли кэширование запросов. Нам нужно проверить более одной переменной, поэтому мы можем сделать все это одновременно, проверив переменную query%
mysql> показывать переменные типа 'query%'; + ------------------------------ + --------- + | Переменное_имя | Значение | + ------------------------------ + --------- + | query_alloc_block_size | 8192 | | query_cache_limit | 1048576 | | query_cache_min_res_unit | 4096 | | query_cache_size | 8388608 | | query_cache_type | ON | | query_cache_wlock_invalidate | ВЫКЛ | | query_prealloc_size | 8192 | +------------------------------+---------+
Вот важные пункты в списке и их значение:
- query_cache_size - Это размер кэша в байтах. Установка этого значения в 0 эффективно отключит кеширование.
- query_cache_type - Это значение должно быть включено или 1, чтобы кэширование запросов было включено по умолчанию.
- query_cache_limit - Это максимальный размер запроса (в байтах), который будет кэшироваться.
Если значение query_cache_size установлено в 0 или вы просто хотите изменить его, вам нужно будет выполнить следующую команду, учитывая, что это значение в байтах. Например, если вы хотите выделить 8 МБ для кэша, мы будем использовать 1024 * 1024 * 8 = 8388608 в качестве значения.
SET GLOBAL query_cache_size = 8388608;
Точно так же другие параметры могут быть установлены с тем же синтаксисом:
SET GLOBAL query_cache_limit = 1048576;НАБОР ГЛОБАЛЬНЫЙquery_cache_type
= 1;
Теперь, как мы узнаем, работает ли он на самом деле? Вы можете использовать команду SHOW STATUS, чтобы получить все переменные, которые начинаются с «Qc», чтобы посмотреть, что происходит под капотом..
mysql> ПОКАЗАТЬ СТАТУС, КАК 'Qc%'; + ------------------------- + -------- + | Переменное_имя | Значение | + ------------------------- + -------- + | 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 строк в наборе (0,00 сек)
В статистике вы заметите, что у меня осталось много свободной памяти. Если на вашем сервере много черновиков с низким содержанием, вам может потребоваться увеличить это значение, но я бы не стал тратить слишком много памяти на кэширование запросов для веб-сервера ... вам нужно оставить память доступной для apache, php, ruby или все, что вы используете.
Включить в файле конфигурации
Если вы хотите, чтобы эти изменения выдержали перезагрузку или перезапуск сервера mysql, вам необходимо добавить их в файл конфигурации /etc/mysql/my.cnf для MySQL. Обратите внимание, что это может быть в другом месте вашей установки.
Откройте файл с помощью текстового редактора в режиме sudo или root, а затем добавьте эти значения, если они еще не существуют в файле. Если они существуют, просто раскомментируйте их.
query_cache_size = 268435456 query_cache_type = 1 query_cache_limit = 1048576
Кэширование запросов может значительно повысить скорость вашего веб-приложения, особенно если ваше приложение в основном читает. Следите за состоянием, используя методы выше, и посмотрите, как оно работает.