Solicitare cache în MySQL

MySQL atunci când se lucrează cu tabele folosind algoritmi extrem de scalabile, astfel încât MySQL poate lucra chiar și cu cantități mici de memorie. Desigur, pentru cea mai bună performanță aveți nevoie de mai mult RAM.

În primul rând, asigurați-vă că cache este activat. variabil

  • query_cache_type ar trebui să aibă o valoare de ON (1) sau CERERII (2) și
  • query_cache_limit - determină dimensiunea maximă a rezultatului care va cădea în cache
  • query_cache_size fi diferită de zero. Dacă utilizați în cache va CERERII numai interogările care au directivă SQL_CACHE;
  • query_cache_min_res_unit dimensiune minimă a blocului de memorie alocată pentru stocarea rezultatelor interogării cache. MySQL nu stochează memoria cache într-o singură bucată mare, în loc de blocuri alocate la cerere, cu un minim de query_cache_min_res_unit dimensiune (= 4KB implicit). Ultimul astfel de bloc tăiat la o dimensiune a datelor, iar memoria rămasă este eliberată.

Și, dacă aveți o mulțime de interogări mici în cache, atunci aceasta poate duce la fragmentarea memoriei, din cauza numărului mare de blocuri libere. Aceasta, la rândul său, determină eliminarea intrărilor stocate în memoria cache din cauza lipsei de memorie. În acest caz, are sens pentru a reduce valoarea query_cache_min_res_unit. În cazul în care cele mai multe dintre interogările produc un rezultat mare, o creștere a acestui parametru poate îmbunătăți performanța.

Să încercăm să evalueze efectul. Uita-te la modul în care citirile de schimbare a lovit contoare în cache (Qcahe_hits), numărul de cereri declarate nevalide din cauza lipsei de memorie (Qcache_lowmem_prunes), numărul total de o interogare SELECT (de îndată ce acestea sunt memorate în cache). facem:

Pentru a monitoriza cache interogare utilizând SHOW STARE:

  • Qcache_free_blocks arată cât de multe blocuri libere este stocate în memoria cache (va scădea odată cu creșterea cererilor skeshirovannyh).;
  • Qcache_total_blocks - numărul de blocuri ocupate;
  • Qcache_free_memory - prezinta gratuit de memorie „disponibilă“ pentru cache;
  • Qcache_hits - numărul de cereri, rezultatele care au fost preluate din memoria cache, fără a avea acces efectiv baza de date;
  • Qcache_inserts - numărul de cereri care au fost adăugate în memoria cache;
  • Qcache_lowmem_prunes - numărul de interogări care au fost eliminate din cache-ul din cauza lipsei de memorie;
  • Qcache_not_cached - numărul de cereri care nu au fost scrise în cache datorită utilizării funcțiilor de lucru în timp, etc;.
  • Qcache_queries_in_cache - numărul de solicitări care sunt în cache.

Să evalueze eficiența memoriei cache recomandă împărțirea Qcache_hits variabile pe Qcache_hits + Com_select, deoarece atunci când cererea contorul este crescut Qcache_hits (dacă interogarea procesată din memoria cache) sau Com_select (în cazul în care cererea nu este în cache). O astfel de metodă este oferit în «Mysql de performanță de optimizare» O'Reilly

În rețeaua există o altă cale - qcache_hit_ratio = qcache_hits / (qcache_hits + qcache_inserts + qcache_not_cached)

Dacă valoarea este> 0,8, aceasta înseamnă că 80% dintre interogările se încadrează în cache-ul, acesta este un indicator foarte bun.
În cazul în care memoria cache% lovit scăzut, este necesar să se mărească valoarea query_cache_size.

Valoarea curentă poate fi vizualizat după cum urmează:

Din nou, se pune întrebarea: cum de a alege query_cache_size valoarea adecvată?
Acest lucru va ajuta la Qcache_lowmem_prunes. Această variabilă stochează numărul de interogări care au fost eliminate din cache, din cauza nevoii de cache noi interogări. Nevoia de a depune eforturi pentru o astfel de dimensiune a memoriei cache pe care Qcache_lowmem_prunes va crește ușor. În acest scop, se recomandă pentru a compara diferența valoarea Qcache_lowmem_prunes pe oră, iar numărul de cereri primite pentru MySQL în aceeași oră.

În practică, pentru a calcula query_cache_size poate utiliza una dintre cele 2 formulele:
query_cache_size = (numărul de cereri de 10 minute) * (răspuns volum mediu la o interogare) * 1.2
sau
query_cache_size = (volumul traficului de peste 10 min) 1.2 *

Acest lucru va permite solicitărilor cache timp de 10 minute + pentru a obține o cantitate suplimentară de 20% din cache fragmentare de memorie și de rezervă cache opțională
Contorizarea numărul și volumul mediu de răspuns la interogare, puteți utiliza variabile Bytes_sent respectiv

Și așa am crescut query_cache_size valoare, atunci ar trebui să acorde o atenție la valorile Qcache_total_blocks, Qcache_free_blocks și Qcache_queries_in_cache. MySQL stochează toate blocurile cache. La 1 cerere bloc trebuie să fie 2, unul pentru textul cererii, la al doilea rezultat.
Dacă ne uităm la masa cu valorile Qcache%
Numărul total de blocuri cache Qcache_total_blocks - 28
6 este acum în cache de cerere și, prin urmare, ocupat 6 * 2 = 12 Blocuri
unități gratuite Qcache_free_blocks - 10. Cu cât este mai neutilizat Qcache_free_blocks, cât este mai mare „fragmentarea“ a memoriei cache.
În cazul în care majoritatea cererilor au o cantitate mică de date care rezultă, este necesară pentru a reduce dimensiunea minimă a query_cache_min_res_unit blocului cache, care implicit este de 4 KB.
În cazul în care cele mai multe interogări de a reveni o mulțime de date - este necesar pentru a mări dimensiunea memoriei cache a blocului.
Principalul lucru - este de a atinge minim Qcache_free_blocks.

Dacă Qcache_not_cached metru de mare, puteți crește query_cache_limit poproboavt variabilă - va permite să crească limita, și cache rezultatele de interogare care sunt „nu se potrivesc“.

Pentru utilizarea memoriei cache de interogare corespund următoarelor variabile de configurare:

  • query_cache_size - dimensiunea memoriei cache de interogare. query_cache_size = 0 dezactivează cache;
  • query_cache_limit - dimensiunea maximă a probei stocate în memoria cache;
  • query_cache_wlock_invalidate - determină dacă datele vor fi preluate din memoria cache, în cazul în care masa la care sunt blocate pentru citire.

Pentru a activa interogarea cache MySQL adăuga suficiente linii în my.cnf (secțiunea [mysqld]):

Și reporniți serviciul.

  • Interogări cu SQL_NO_CACHE
  • interogările preparate (situațiile financiare întocmite);
  • subinterogările cerere care sunt cereri externe;
  • Queries din cadrul procedurilor și funcțiilor stocate;
  • Interogările care utilizează funcții:
    BENCHMARK (), CONNECTION_ID (), CONVERT_TZ (), CURDATE (), CURRENT_DATE (), CURRENT_TIME (), CURRENT_TIMESTAMP (), CURTIME (), DATABASE (), ENCRYPT (), cu un argument, FOUND_ROWS (), GET_LOCK () , LAST_INSERT_ID (), LOAD_FILE (), MASTER_POS_WAIT (), ACUM (), RAND (), RELEASE_LOCK (), somn (), SYSDATE (), UNIX_TIMESTAMP () fără argumente, USER (), UUID ();
  • Interogări folosind funcțiile stocate, variabile utilizator sau link la o masă din INFORMATION_SCHEMA sistem sau baze mysql;
  • Interogările au următoarele forme:
    SELECT. ÎN MOD SHARE
    SELECT. PENTRU UPDATE
    SELECT. ÎN outfile.
    SELECT. ÎN DUMPFILE.
    SELECT * FROM. UNDE autoincrement_col IS NULL
  • Interogări cu tabele temporare sau nu utilizează tabele;
  • Cerere de generare avertismente (avertismente);

Defragmentarea cache cu comanda:

Clean - Echipa:

Cele mai importante
Nu lucrați niciodată cu setările implicite. Acest lucru va duce la neutilizarea majorității resurselor serverului. MySQL Tuning corect poate îmbunătăți performanța bazei de date de mai multe ori. Acest lucru nu va accelera doar până cererea de a lucra, dar și pentru a face față cu sarcina grea.

Ca un exemplu de configurare, puteți utiliza, de asemenea, exemple de configurare MySQL (/usr/share/mysql/my-innodb-heavy-4G.cnf).

Citește alte articole interesante

  • Solicitare cache în MySQL
    sintaxă UPDATE comandă
  • Solicitare cache în MySQL
    MySQL comenzi utile
  • Solicitare cache în MySQL
    Mysql optima setare
  • Solicitare cache în MySQL
    MySQL: "Acces interzis pentru utilizatorul 'debian-sys-deserv' @ 'localhost'"
  • Solicitare cache în MySQL
    Cum de a afla indicii care nu sunt necesare în MySQL
  • Solicitare cache în MySQL
    Tsung-sarcină de testare
  • Solicitare cache în MySQL
    MYSQL: hoinari DE RĂSPUNS
  • Solicitare cache în MySQL
    Zabbix 2 - Monitor MySQL
  • Solicitare cache în MySQL
    Lista de tabele MySQL și structura acestora
  • Solicitare cache în MySQL
    MySQL: Introduceți date de mare