Jednym z najlepszych sposobów na przyspieszenie działania aplikacji sieciowej jest włączenie buforowania zapytań w bazie danych, która buforuje najczęściej używane zapytania SQL w pamięci, aby uzyskać praktycznie natychmiastowy dostęp na następnej stronie, która wykonuje to samo żądanie.
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 domyślnie nie włącza tego. Dziwne, moja instalacja Ubuntu Feisty już ją włączyła ...
Następnie musimy sprawdzić i sprawdzić, czy włączone jest buforowanie zapytań. Musimy sprawdzić więcej niż jedną zmienną, więc równie dobrze możemy 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 | OFF | | query_prealloc_size | 8192 | + ------------------------------ + --------- +
Oto ważne pozycje na liście i ich znaczenie:
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, pozostałe opcje można ustawić przy użyciu tej samej składni:
SET GLOBAL query_cache_limit = 1048576;ZESTAW GLOBALNYquery_cache_type
= 1;
Teraz, jak możemy powiedzieć, czy to faktycznie działa? Możesz użyć polecenia POKAŻ STATUS, aby pobrać wszystkie zmienne rozpoczynające się od "Qc", aby zobaczyć, co dzieje się pod maską.
mysql> SHOW STATUS LIKE '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.