If-Koubou

Ubrzajte svoju web stranicu s MySQL Query Caching

Ubrzajte svoju web stranicu s MySQL Query Caching (Kako da)

Jedan od najboljih načina za ubrzanje vaše web aplikacije je omogućavanje cachinga upita u vašoj bazi podataka, koja sprema uobičajene SQL upite u memoriju za praktički brz pristup sljedećoj stranici koja čini isti zahtjev.

Razlog zašto je ova metoda toliko moćna je da ne morate mijenjati svoju web aplikaciju, samo morate žrtvovati malo memorije. To neće riješiti sve vaše probleme, ali sigurno ne može naštetiti.

Napomena: ako vaša aplikacija često ažurira tablice, tada će se cache upita trajno očistiti i nećete imati puno ili nikakve koristi od toga. To je idealno za aplikaciju koja se uglavnom bazira na bazi podataka, kao što je WordPress blog. To također neće raditi ako radite na zajedničkom hostingu.

Omogućivanje predmemoriranja pri pokretanju poslužitelja

Prva stvar koju želite učiniti je pobrinite se da vaša instalacija MySQL-a zapravo ima podršku za predmemoriranje upita. Većina distribucija radi, ali svakako biste trebali provjeriti.

Želite pokrenuti ovu naredbu sa svoje MySQL konzole, što će vam reći je li dostupan upit za caching.

mysql> pokazuju varijable poput 'have_query_cache'; + ------------------ + ------- + | Variable_name | Vrijednost | + ------------------ + ------- + | have_query_cache | DA | + + ------------------ ------- + 

Nemojte to pogrešno shvatiti kao da je omogućavanje cachinga upita zapravo omogućeno, jer većina pružatelja hostinga to neće omogućiti prema zadanim postavkama. Čudno, moju Ubuntu Feisty instalaciju već je omogućila ...

Zatim ćemo morati provjeriti je li omogućeno cachingiranje upita. Morat ćemo provjeriti više od jedne varijable pa ćemo isto tako učiniti sve odjednom provjerom varijable upita%

mysql> prikazuju varijable kao što su "upit%"; + ------------------------------ + --------- + | 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 - Ovo je veličina predmemorije u bajtovima. Postavljanje ove vrijednosti na 0 učinkovito će onemogućiti predmemoriju.
  • query_cache_type - Ova vrijednost mora biti UKLJUČENO ili 1 za omogućavanje omogućavanja cachinga prema zadanim postavkama.
  • query_cache_limit - Ovo je upit maksimalne veličine (u bajtovima) koji će biti spremljeni u predmemoriju.

Ako je vrijednost query_cache_size postavljena na 0 ili ga samo želite promijeniti, morat ćete pokrenuti sljedeću naredbu, imajući na umu da je vrijednost u bajtovima. Na primjer, ako želite dodijeliti 8 MB u predmemoriju upotrijebiti ćemo vrijednost kao vrijednost 1024 * 1024 * 8 = 8388608.

SET GLOBAL query_cache_size = 8388608;

Slično tome, druge opcije mogu se postaviti istom sintaksom:

SET GLOBAL query_cache_limit = 1048576;
Postavite GLOBAL query_cache_type = 1;

Sada kako možemo reći je li to zapravo radi? Možete koristiti SHOW STATUS naredbu za povlačenje svih varijabli koje počinju s "Qc" da biste pogledali što se događa ispod nape.

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 s) 

U statistici ćete primijetiti da imam dovoljno slobodne memorije. Ako vaš poslužitelj pokazuje puno prljavih šljiva, možda ćete morati razmotriti povećanje te vrijednosti, ali ne bih potrošila previše memorije u predmemoriranju upita za web poslužitelja ... trebate ostaviti memorije koja je dostupna za apache, php, rubin ili sve što koristite.

Omogući u konfiguracijskoj datoteci

Ako želite da ove izmjene prežive ponovno pokretanje ili ponovno pokretanje MySQL poslužitelja, morat ćete ih dodati u datoteku za konfiguraciju /etc/mysql/my.cnf za MySQL. Imajte na umu da je možda na drugom mjestu na 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 ne komentirajte.

query_cache_size = 268435456 query_cache_type = 1 query_cache_limit = 1048576

Upit za predmemoriranje može značajno poboljšati brzinu vaše web aplikacije, pogotovo ako vaša aplikacija uglavnom čita. Pratite stanje pomoću gore navedenih metoda i pogledajte kako funkcionira tijekom vremena.