Домашня » як » Прискорити ваш веб-сайт з MySQL Query Кешування

    Прискорити ваш веб-сайт з MySQL Query Кешування

    Один з кращих способів прискорити веб-додаток - це включення кешування запитів у базі даних, що кешує зазвичай використовувані SQL-запити в пам'яті для практично миттєвого доступу на наступній сторінці, яка робить той самий запит..

    Причина цього методу настільки потужна, що вам не доведеться вносити будь-які зміни у веб-додаток, вам просто потрібно пожертвувати трохи пам'яті. Це не вирішить всі ваші проблеми, але, безумовно, це не зашкодить.

    Примітка: якщо ваша програма часто оновлює таблиці, кеш запитів буде постійно видалятися, і ви не будете отримувати багато або будь-яку користь від цього. Це ідеально підходить для програми, яка в основному читається проти бази даних, наприклад блогу WordPress. Це також не працюватиме, якщо ви працюєте на спільному хостингу.

    Увімкнути кешування з запущеним сервером

    Перше, що ви хочете зробити, це переконатися, що у вашій установці MySQL фактично є підтримка кешування запитів. Більшість дистрибутивів роблять, але ви повинні перевірити все одно.

    Ви хочете запустити цю команду з консолі MySQL, яка повідомлятиме вам, чи доступно кешування запитів.

    mysql> показати змінні типу 'have_query_cache'; + ------------------ + ------- + | Variable_name | Значення + ------------------ + ------- + | have_query_cache | ТАК | +------------------+-------+ 

    Не змінюйте це як на те, що кешування запитів фактично ввімкнено, оскільки більшість провайдерів хостингу не збираються включати це за замовчуванням. Як не дивно, моя установка Ubuntu Feisty вже дозволила ...

    Далі потрібно перевірити, чи включено кешування запитів. Потрібно перевірити більше однієї змінної, тому ми можемо зробити все це одразу, перевіривши для запиту змінної%

    mysql> показувати змінні типу 'query%'; + ------------------------------ + --------- + | Variable_name | Значення + ------------------------------ + --------- + | 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 або ви просто хочете змінити його, потрібно виконати наступну команду, маючи на увазі, що значення знаходиться в байтах. Наприклад, якщо ви хочете виділити 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 | Значення + ------------------------- + -------- + | 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 сек) 

    Ви помітите в статистиці, що в мене залишилося багато вільної пам'яті. Якщо ваш сервер показує багато чорносливів lowmem, вам, можливо, доведеться розглянути можливість збільшення цього значення, але я б не витратив занадто багато пам'яті на кешування запитів для веб-сервера ... потрібно залишити пам'ять доступною для apache, php, ruby ​​або що б ви не використовували.

    Увімкнути в конфігураційному файлі

    Якщо ви хочете, щоб ці зміни пережили перезавантаження або перезавантаження сервера mysql, вам доведеться додати їх у ваш /etc/mysql/my.cnf конфігураційний файл для MySQL. Зауважте, що це може бути в іншому місці вашої інсталяції.

    Відкрийте файл за допомогою текстового редактора в режимі sudo або root, а потім додайте ці значення, якщо вони ще не існують у файлі. Якщо вони існують, просто розбекайте їх.

    query_cache_size = 268435456 query_cache_type = 1 query_cache_limit = 1048576

    Кешування запитів може значно підвищити швидкість веб-програми, особливо якщо ваша програма в основному читає. Відстежуйте стан за допомогою методів, описаних вище, і перегляньте, як він працює з часом.