Един от най-добрите начини за ускоряване на уеб приложението ви е да активирате заявката за кеширане в базата данни, която кешира често използва SQL заявки в паметта за практически незабавен достъп от следващата страница, която прави същата заявка.
Причината, поради която този метод е толкова мощен, е, че не е нужно да правите никакви промени в уеб приложението си, просто трябва да пожертвате малко памет. Това няма да реши всички ваши проблеми, но определено не може да навреди.
Забележка: Ако приложението ви обновява често таблиците, кеша за заявки ще бъде непрекъснато изчистван и няма да получите много или никаква полза от това. Това е идеално за приложение, което главно се чете срещу базата данни, като блог в WordPress. Това също няма да работи, ако работите на споделен хостинг.
Активиране на кеширане със стартиране на сървър
Първото нещо, което ще искате да направите, е да сте сигурни, че инсталирането на MySQL всъщност има налична поддръжка за кеширане на заявки. Повечето дистрибуции правят, но все пак трябва да проверите.
Вие ще искате да изпълните тази команда от вашата MySQL конзола, която ще ви каже дали е налично кеширане на заявки.
mysql> show variables like 'have_query_cache'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | have_query_cache | YES | +------------------+-------+
Не погребвайте това, тъй като кеширането на заявки всъщност е активирано, защото повечето хостинг доставчици няма да го активират по подразбиране. Странно, инсталирането ми в Ubuntu Feisty вече е позволило …
След това ще трябва да проверим дали кеширането на заявки е активирано. Ще трябва да проверим повече от една променлива, затова можем да направим всичко едновременно, като проверим променливата заявка%
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 - Тази стойност трябва да е ON или 1, за да може кеширането на заявки да бъде активирано по подразбиране.
- query_cache_limit - Това е заявката за максимален размер (в байтове), която ще бъде кеширана.
Ако стойността query_cache_size е зададена на 0 или просто искате да я промените, ще трябва да изпълните следната команда, като се има предвид, че стойността е в байтове. Например, ако искате да разпределите 8MB към кеша, ще използваме 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)
В статистиката ще забележите, че имам много свободна памет. Ако вашият сървър показва много нискозърнести сини сливи, може да се наложи да увеличите тази стойност, но няма да изразходвам много памет за кеширане на заявки за уеб сървър … трябва да оставите паметта достъпна за apache, php, ruby или каквото и да използвате.
Активиране в конфигурационния файл
Ако искате тези промени да преживеят рестартиране или рестартиране на MySQL сървъра, ще трябва да ги добавите към конфигурационния файл /etc/mysql/my.cnf за MySQL. Обърнете внимание, че тя може да се намира на различно място в инсталацията ви.
Отворете файла, като използвате текстов редактор в sudo или коренния режим, след което добавете тези стойности, ако те вече не съществуват във файла. Ако те съществуват, просто ги разколебайте.
query_cache_size = 268435456 query_cache_type=1 query_cache_limit=1048576
Кеширането на заявки може значително да подобри скоростта на уеб приложението ви, особено ако приложението Ви главно чете. Следете състоянието, като използвате горните методи и вижте как работи с течение на времето.