Начална » как да » Ускорете Вашия уеб сайт с MySQL Query Caching

    Ускорете Вашия уеб сайт с MySQL Query Caching

    Един от най-добрите начини за ускоряване на уеб приложението е да активирате кеширането на заявки в базата данни, което кешира често използваните SQL заявки в паметта за почти незабавен достъп от следващата страница, която прави същото искане.

    Причината, поради която този метод е толкова мощен е, че не е нужно да правите никакви промени в уеб приложението си, а просто трябва да пожертвате малко памет. Това няма да поправи всичките ви проблеми, но определено не може да навреди.

    Забележка: ако приложението ви актуализира често таблици, кешът за заявки ще бъде постоянно изчистван и няма да получите много или никаква полза от това. Това е идеално за приложение, което най-често се чете срещу базата данни, като например блог на WordPress. Това също няма да работи, ако работите на споделен хостинг.

    Активиране на кеширането със сървър

    Първото нещо, което искате да направите, е да се уверите, че вашата инсталация на MySQL всъщност има поддръжка за кеширане на заявки. Повечето дистрибуции правят, но все пак трябва да проверите.

    Вие ще искате да изпълните тази команда от MySQL конзолата, която ще ви каже дали кеширането на заявки е налично.

    mysql> показва променливи като 'have_query_cache'; + ------------------ + ------- + | Variable_name | Стойност | + ------------------ + ------- + | have_query_cache | ДА | +------------------+-------+ 

    Не бъркайте с това, че кеширането на заявки всъщност е активирано, защото повечето доставчици на хостинг услуги няма да разрешат това по подразбиране. Колкото и да е странно, моята инсталация на Ubuntu Feisty вече я е активирала…

    След това ще трябва да проверим и да видим дали кеширането на заявки е активирано. Ще трябва да проверим повече от една променлива, така че можем да направим всичко наведнъж, като проверим за променливата query%

    mysql> показва променливи като 'query%'; + ------------------------------ + --------- + | Variable_name | Стойност | + ------------------------------ + --------- + | query_alloc_block_size | 8192 |. \ T | query_cache_limit | 1048576 | | query_cache_min_res_unit | 4096 |. \ T | query_cache_size | 8388608 | | query_cache_type | ON | | query_cache_wlock_invalidate | OFF | | query_prealloc_size | 8192 |. \ T +------------------------------+---------+ 

    Ето важните елементи в списъка и какво означават те:

    • query_cache_size - Това е размерът на кеша в байтове. Задаването на тази стойност на 0 ефективно ще деактивира кеширането.
    • query_cache_type - Тази стойност трябва да бъде ВКЛ. Или 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 | Стойност | + ------------------------- + -------- + | Qcache_free_blocks | 65 | | Qcache_free_memory | 201440 | | Qcache_hits | 18868 |. \ T | Qcache_inserts | 2940 |. \ T | Qcache_lowmem_prunes | 665 | | Qcache_not_cached | 246 |. \ T | Qcache_queries_in_cache | 492 |. \ T | Qcache_total_blocks | 1430 |. \ T + ------------------------- + -------- + 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

    Кеширането на заявки може значително да подобри скоростта на вашето уеб приложение, особено ако приложението ви се чете главно. Наблюдавайте състоянието, като използвате методите по-горе и вижте как работи с течение на времето.