Główna » jak » Przyspiesz swoją witrynę dzięki buforowaniu zapytań MySQL

    Przyspiesz swoją witrynę dzięki buforowaniu zapytań MySQL

    Jednym z najlepszych sposobów na przyspieszenie działania aplikacji sieciowej jest włączenie buforowania zapytań w bazie danych, która buforuje często używane zapytania SQL w pamięci, aby uzyskać praktycznie natychmiastowy dostęp na następnej stronie, która wysyła tę samą prośbę..

    Powodem, dla którego ta metoda jest tak potężna, jest to, że nie musisz wprowadzać żadnych zmian w swojej aplikacji internetowej, po prostu poświęcić trochę pamięci. To nie naprawi wszystkich twoich problemów, ale na pewno nie zaszkodzi.

    Uwaga: jeśli aplikacja aktualizuje często tabele, pamięć podręczna zapytań będzie stale czyszczona, a użytkownik nie otrzyma z tego żadnej korzyści. Jest to idealne rozwiązanie dla aplikacji, które najczęściej czytają bazy danych, takie jak blog WordPress. To również nie zadziała, jeśli korzystasz z hostingu współdzielonego.

    Włącz buforowanie przy uruchomionym serwerze

    Pierwszą rzeczą, którą będziesz chciał zrobić, jest upewnienie się, że twoja instalacja MySQL faktycznie obsługuje buforowanie zapytań. Większość dystrybucji robi, ale powinieneś sprawdzić mimo to.

    Będziesz chciał uruchomić to polecenie z konsoli MySQL, która powie ci, czy buforowanie zapytań jest dostępne.

    mysql> pokaż zmienne takie jak "have_query_cache"; + ------------------ + ------- + | Variable_name | Wartość | + ------------------ + ------- + | have_query_cache | TAK | +------------------+-------+ 

    Nie mylisz tego w ten sposób, że buforowanie zapytań jest rzeczywiście włączone, ponieważ większość dostawców hostingu nie włącza tego domyślnie. Dziwne, moja instalacja Ubuntu Feisty już ją włączyła ...

    Następnie musimy sprawdzić i sprawdzić, czy włączono buforowanie zapytań. Musimy sprawdzić więcej niż jedną zmienną, abyśmy mogli zrobić to wszystko naraz, sprawdzając zmienne zapytanie%

    mysql> pokaż zmienne takie jak "zapytanie%"; + ------------------------------ + --------- + | Variable_name | Wartość | + ------------------------------ + --------- + | 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 | WYŁ. | | query_prealloc_size | 8192 | +------------------------------+---------+ 

    Oto ważne pozycje na liście i ich znaczenie:

    • query_cache_size - Jest to wielkość pamięci podręcznej w bajtach. Ustawienie tej wartości na 0 skutecznie wyłącza buforowanie.
    • query_cache_type - Ta wartość musi mieć wartość ON lub 1, aby buforowanie zapytań było domyślnie włączone.
    • query_cache_limit - Jest to zapytanie o maksymalną wielkość (w bajtach), które będzie buforowane.

    Jeśli wartość query_cache_size jest ustawiona na 0 lub po prostu chcesz ją zmienić, musisz uruchomić następujące polecenie, pamiętając, że wartość jest w bajtach. Na przykład, jeśli chcesz przydzielić 8 MB do pamięci podręcznej, użyjemy 1024 * 1024 * 8 = 8388608 jako wartości.

    SET GLOBAL query_cache_size = 8388608;

    Podobnie inne opcje można ustawić za pomocą tej samej składni:

    SET GLOBAL query_cache_limit = 1048576;
    ZESTAW GLOBALNY query_cache_type = 1;

    Teraz, jak możemy powiedzieć, czy to faktycznie działa? Możesz użyć polecenia POKAŻ STATUS, aby pobrać wszystkie zmienne zaczynające się od "Qc", aby zobaczyć, co się dzieje pod maską.

    mysql> POKAŻ STATUS JAK 'Qc%'; + ------------------------- + -------- + | Variable_name | Wartość | + ------------------------- + -------- + | 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 wierszy w zestawie (0,00 s) 

    Zauważysz w statystykach, że mam dużo wolnej pamięci. Jeśli twój serwer pokazuje dużo lowmem śliwek, możesz potrzebować rozważyć zwiększenie tej wartości, ale nie wydałbym zbyt dużo pamięci na buforowanie zapytań dla serwera WWW ... musisz zostawić pamięć dostępną dla apache, php, ruby ​​lub cokolwiek używasz.

    Włącz w pliku konfiguracyjnym

    Jeśli chcesz, aby te zmiany przetrwały po ponownym uruchomieniu lub ponownym uruchomieniu serwera mysql, musisz dodać je do pliku konfiguracyjnego /etc/mysql/my.cnf dla MySQL. Zauważ, że może znajdować się w innej lokalizacji w twojej instalacji.

    Otwórz plik za pomocą edytora tekstowego w trybie sudo lub root, a następnie dodaj te wartości, jeśli jeszcze nie istnieją w pliku. Jeśli istnieją, po prostu odkomentuj je.

    query_cache_size = 268435456 query_cache_type = 1 query_cache_limit = 1048576

    Buforowanie zapytań może znacznie poprawić szybkość twojej aplikacji internetowej, szczególnie jeśli twoja aplikacja czyta głównie. Monitoruj status za pomocą powyższych metod i zobacz, jak działa z czasem.