Одним из лучших способов ускорения вашего веб-приложения является включение кеширования запросов в вашу базу данных, которое кэширует обычно используемые SQL-запросы в памяти для практически мгновенного доступа на следующей странице, которая делает тот же запрос.
Причина, по которой этот метод настолько силен, заключается в том, что вам не нужно вносить какие-либо изменения в ваше веб-приложение, вам просто нужно пожертвовать немного памяти. Это не будет устранять все ваши проблемы, но это определенно не может повредить.
Примечание. Если ваше приложение часто обновляет таблицы, кеширование запросов будет постоянно очищаться, и вы не получите от этого никакой пользы. Это идеально подходит для приложения, которое в основном читает базу данных, такую как блог WordPress. Это также не будет работать, если вы используете общий хостинг.
Включить кеширование с запуском сервера
Первое, что вам нужно сделать, это убедиться, что ваша установка MySQL действительно имеет доступ к кешированию запросов. Большинство дистрибутивов, но вы должны все равно проверить.
Вы хотите запустить эту команду с консоли MySQL, которая сообщит вам, доступно ли кэширование запросов.
mysql> show variables like 'have_query_cache'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | have_query_cache | YES | +------------------+-------+
Не ошибайтесь, так как это означает, что кеширование запросов действительно включено, поскольку большинство хостинг-провайдеров не включит это по умолчанию. Как ни странно, установка Ubuntu Feisty уже позволила …
Затем нам нужно проверить и проверить, включено ли кэширование запросов. Нам нужно проверить несколько переменных, поэтому мы можем сделать все это сразу, проверив переменную query%
mysql> show variables like 'query%'; +------------------------------+---------+ | Variable_name | Value | +------------------------------+---------+ | 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 | OFF | | 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;
SET GLOBAL
query_cache_type
= 1;
Теперь, как мы можем сказать, действительно ли это работает? Вы можете использовать команду SHOW STATUS, чтобы вытащить все переменные, начинающиеся с «Qc», чтобы посмотреть, что происходит под капотом.
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, вам может потребоваться увеличить это значение, но я бы не потратил слишком много памяти на кеширование запросов для веб-сервера … вам нужно оставить память доступной для apache, php, ruby или независимо от того, что вы используете.
Включить в файле конфигурации
Если вы хотите, чтобы эти изменения выдержали перезагрузку или перезапуск сервера mysql, вам необходимо добавить их в файл конфигурации /etc/mysql/my.cnf для MySQL. Обратите внимание, что это может быть в другом месте установки.
Откройте файл с помощью текстового редактора в режиме sudo или root, а затем добавьте эти значения, если они еще не существуют в файле. Если они существуют, просто расколите их.
query_cache_size = 268435456 query_cache_type=1 query_cache_limit=1048576
Кэширование запросов может значительно повысить скорость вашего веб-приложения, особенно если ваше приложение в основном читает. Контролируйте состояние, используя приведенные выше методы, и посмотрите, как он работает с течением времени.