Ubrzajte svoje web stranice s MySQL Query Caching
Jedan od najboljih načina da ubrzate svoju web-aplikaciju je omogućavanje predmemoriranja upita u vašoj bazi podataka, koji sprema često korištene SQL upite u memoriju za gotovo trenutni pristup sljedećom stranicom koja čini isti zahtjev.
Razlog zašto je ova metoda toliko moćna je da ne morate napraviti nikakve promjene na svojoj web aplikaciji, samo trebate žrtvovati malo memorije. To neće riješiti sve vaše probleme, ali to definitivno ne može nauditi.
Napomena: ako vaša aplikacija često ažurira tablice, tada će predmemorija upita biti stalno pročišćena i od toga nećete dobiti puno ili nikakvu korist. To je idealno za aplikaciju koja se uglavnom čita protiv baze podataka, kao što je WordPress blog. To također neće raditi ako radite na hosting.
Omogući spremanje u predmemoriju s poslužiteljem
Prva stvar koju ćete htjeti učiniti je da provjerite je li instalacija MySQL-a zapravo dostupna podrška za predmemoriranje upita. Većina distribucija radi, ali svejedno trebate provjeriti.
Ćete htjeti pokrenuti ovu naredbu s MySQL konzole, koja će vam reći ako je dostupno predmemoriranje upita.
mysql> prikaži varijable poput 'have_query_cache'; + ------------------ + ------- + | Variable_name | Vrijednost | + ------------------ + ------- + | have_query_cache | DA | +------------------+-------+
Nemojte ovo zamijeniti kao značenje da je predmemoriranje upita zapravo omogućeno, jer većina davatelja hostinga to neće omogućiti prema zadanim postavkama. Čudno je da je moja Ubuntu Feisty instalacija već omogućila ...
Zatim ćemo morati provjeriti i vidjeti je li omogućeno predmemoriranje upita. Morat ćemo provjeriti više od jedne varijable, tako da možemo sve to učiniti odjednom provjerom za upit varijable%
mysql> prikaži varijable poput 'query%'; + ------------------------------ + --------- + | Variable_name | Vrijednost | + ------------------------------ + --------- + | 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 | +------------------------------+---------+
Evo važnih stavki na popisu i što oni znače:
- query_cache_size - To je veličina predmemorije u bajtovima. Postavljanje ove vrijednosti na 0 učinkovito će onemogućiti predmemoriranje.
- query_cache_type - Ova vrijednost mora biti UKLJUČENA ili 1 za omogućavanje predmemoriranja upita prema zadanim postavkama.
- query_cache_limit - Ovo je upit maksimalne veličine (u bajtovima) koji će biti spremljen u predmemoriju.
Ako je vrijednost query_cache_size postavljena na 0 ili je samo želite promijeniti, morat ćete pokrenuti sljedeću naredbu, imajući na umu da je vrijednost u bajtovima. Na primjer, ako želite dodijeliti 8MB u predmemoriju, koristit ćemo 1024 * 1024 * 8 = 8388608 kao vrijednost.
SET GLOBAL query_cache_size = 8388608;
Isto tako, ostale opcije mogu se postaviti s istom sintaksom:
SET GLOBAL query_cache_limit = 1048576;SET GLOBALquery_cache_type
= 1;
Kako ćemo sada znati radi li se zapravo o tome? Možete upotrijebiti naredbu SHOW STATUS da biste povukli sve varijable koje počinju s "Qc" da biste pogledali što se događa ispod haube.
mysql> POKAŽI STATUS LIKE 'Qc%'; + ------------------------- + -------- + | Variable_name | Vrijednost | + ------------------------- + -------- + | 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 redaka u skupu (0.00 sek)
U statistici ćete primijetiti da mi je ostalo dosta slobodne memorije. Ako vaš poslužitelj pokazuje mnogo lowmem prunes, možda ćete morati razmotriti povećanje ove vrijednosti, ali ne bih potrošio previše memorije na predmemoriranje upita za web poslužitelj ... morate ostaviti memoriju dostupnu za apache, php, ruby, ili što god koristite.
Omogući u konfiguracijskoj datoteci
Ako želite da te promjene prežive ponovno podizanje sustava ili ponovno pokretanje mysql poslužitelja, morat ćete ih dodati u svoju /etc/mysql/my.cnf konfiguracijsku datoteku za MySQL. Imajte na umu da je možda na drugom mjestu u instalaciji.
Otvorite datoteku pomoću uređivača teksta u sudo ili root modu, a zatim dodajte te vrijednosti ako već ne postoje u datoteci. Ako postoje, samo ih odbacite.
query_cache_size = 268435456 query_cache_type = 1 query_cache_limit = 1048576
Predmemiranje upita može značajno poboljšati brzinu vaše web aplikacije, pogotovo ako se vaša aplikacija uglavnom čita. Pratite stanje pomoću gore navedenih metoda i pogledajte kako funkcionira tijekom vremena.