Optimizarea memorării în cache a interogărilor mysql

Urmărirea unui transfer de gazduire. destul de multe informații despre baza de date MySQL. În același timp, am decis să-mi optimizez puțin munca prin includerea suportului pentru cache.

După instalare, MySQL suportă deja mecanismul de memorare a cache-ului de interogare, dar în mod implicit este dezactivat. Setările implicite sunt următoarele:







Dimensiunea memoriei cache este zero. Pentru a specifica o memorie cache de 32 MB, adăugați următoarea linie la my.conf (în secțiunea [mysqld]):

Pentru a nu reporni serverul MySQL, vom schimba și configurația curentă executând următoarea interogare cu privilegii superuser:

mysql> set @ [la] global [dot] interogare _cache_size = 32 * 1024 * 1024;
Interogare OK, 0 rânduri afectate (0.00 sec)

O altă opțiune, care ar trebui să acorde o atenție - această query_cache_limit - stabilește valoarea maximă a rezultatului interogării, care poate fi plasat în cache.

Puteți verifica starea cache-ului prin următoarea interogare:

  • Qcache_free_memory - cantitatea de memorie liberă alocată pentru cache.
  • Qcache_hits - numărul de cereri elaborate din memoria cache.
  • Qcache_inserts - numărul de cereri de inserare în memoria cache.
  • Qcache_lowmem_prunes - numărul de eliberări de memorie din cauza plinătății cache-ului.
  • Qcache_not_cached - numărul de solicitări care nu pot fi stocate în cache.
  • Qcache_queries_in_cache - numărul de solicitări aflate în prezent în memoria cache.

Se calculează cache-efektivnost poate fi următoarea formulă: Qcache_hits / (Qcache_inserts + Qcache_not_cached).







De fapt, este timpul să întrebați cum funcționează cache-ul. Este foarte simplu. Pentru fiecare interogare SELECT, suma sumă a șirului de interogare este calculată și este căutată în memoria cache. Dacă există - ruzeltat întors din cache - dacă nu, executați o interogare, iar rezultatul este stocat în memoria cache (cu condiția ca rezultatul nu mai este valori query_cache_limit).
Pentru fiecare tip de solicitare UPDATE, REPLACE, INSERT, DELETE, TRUNCATE sau ALTER, sunt eliminate din cache toate interogări folosind tabelul de renovare în curs.

Este de remarcat, de asemenea, câteva caracteristici ale cache-ului, și anume:

  • Diferența dintre interogări este determinată literal, comparația este sensibilă la registru. Prin urmare, selectați SELECT * FROM news și selectați * FROM news va fi pentru memoria cache cu două solicitări diferite.
  • Memoria cache primește întotdeauna rezultatul interogării în ansamblu, rezultatele subrequeries nu sunt stocate în cache.
  • Memoria cache funcționează la fel pentru interogări pe tabele cu mecanisme de stocare diferite.
  • Un număr de interogări nu sunt stocate în cache:
    • Interogări care conțin una dintre funcțiile nedeterministe: ACUM (). SLEEP (). RAND (). CURTIME (). LAST_INSERT_ID () și.d.
    • Cererile care utilizează funcții sau proceduri stocate definite de utilizator.
    • Interogări care utilizează valorile variabilelor locale.
    • Solicită accesarea bazelor de date mysql sau INFORMATION_SCHEMA.
    • Interogări de tipul SELECT. PENTRU UPDATE, SELECT. ÎN MODUL DE ACȚIUNE. SELECT. IN OUTFILE. SELECT. IN DUMPFILE. SELECT * FROM. Unde autoincrement_col este NULL.
    • Interogări care utilizează tabele temporare.
    • Interogări care nu se referă la tabele.
    • Solicitări care generează avertismente.
    • În cazul în care utilizatorul are drepturi nu pe întregul tabel, ci numai pe anumite coloane ale tabelului. Această excepție se datorează faptului că memoria cache a interogării este aceeași pentru toți utilizatorii, iar drepturile de acces la cache sunt verificate numai la nivelul tabelului.

Dacă nu doriți ca cererea să fie stocată în cache, utilizați directiva SQL_NO_CACHE. care este plasat imediat după instrucțiunea SELECT. Un exemplu de astfel de interogare:

mysql> SELECT SQL_NO_CACHE numele de utilizator FROM mail_users;







Articole similare

Trimiteți-le prietenilor: