cache MySQL

În primul rând, interogare cache viteze foarte mult până generație pagina. În esență, pentru că SQL-interogări sunt aproape întotdeauna principalul obstacol.

În al doilea rând, punerea în cache integrată este mult mai ușor de implementat decât în ​​cache la nivel de aplicație.
Arătând în configurarea „query_cache_type = 1“ includem caching tuturor cererilor. În același timp, nu avem nevoie să zaparivatsya cache invalidarea - bază de date se știe când tabela este schimbat, iar memoria cache este ștearsă automat. Aici este un exemplu.

Dacă în loc de fișierele pe care le folosim un alt fel de cache la nivel de aplicație, cum ar fi Memcache, nu se schimba nimic - avem încă nevoie pentru a rula prin codul și lipiți if-else.

Pe scurt, cel mai mare plus cache MySQL - comandat unul din punctul în query_cache_type config = 1 și apoi încărcați de bază a scăzut. Chiar și codul nu trebuie să atingă.

Cel mai mare dezavantaj este faptul că invalidarea memoriei cache se produce prea simplu algoritm: dacă tabela de bază este schimbat aspectul, din care dorim să le facă o cerere. De exemplu, se pare ca acest lucru. Există 100 000 de utilizatori, în cache. Am venit și a schimbat ceva în profilul tău. S-ar părea că puteți pierde 1 cache (numai pentru utilizatorul că ceva sa schimbat). Dar MySQL șterge tot utilizatorii cache, deoarece nu știe în care informațiile utilizator a schimbat - el vede doar data modificărilor de masă.

Astfel, vom înscrie de memorie foarte rapid, ceea ce avem atât de puțin, și cache va fi ineficiente.

Dar, dacă aveți datele se schimbă rar, MySQL cache - o soluție bună. Cu toate acestea, în cazul în care un server care rulează mai multe site-uri, cache este activat pentru toate dintr-o dată. Prin urmare, în cazul în care memoria este scăzută, puteți specifica manual cereri care cache, și care nu sunt. Iată cum

  1. Găsit în config query_cache_type = 2
  2. În solicitările pe care doresc să scrie cache directivă SQL_CACHE:
    'SELECT SQL_CACHE * FROM tag-uri'

După cum se poate vedea, în acest caz, mai avem pentru a rula cod și ponastavlyat SQL_CACHE în cererile.

cache MySQL

Acum ne uităm la statistici (o la mine, timp de 5 zile)

Bine ai venit! Multumesc pentru articol.
Spune-mi cum ai definit - „După cum se poate vedea, 96% din cereri preluate din memoria cache“.

Am aici următoarele date:
+-------------------------+----------+
| VARIABLE_NAME | Valoarea |
+-------------------------+----------+
| Qcache_free_blocks | 9 |
| Qcache_free_memory | 49016624 |
| Qcache_hits | 23509 |
| Qcache_inserts | 24011 |
| Qcache_lowmem_prunes | 0 |
| Qcache_not_cached | 863 |
| Qcache_queries_in_cache | 16557 |
| Qcache_total_blocks | 33157 |
+-------------------------+----------+

Cum pot calcula eficiente sau nu folosiți?

[Mysqld]
datadir = / var / lib / mysql
soclu = / var / lib / mysql / mysql.sock
utilizator = ****
# Dezactivarea simbolic-link-uri este recomandat pentru a preveni riscurile de securitate asortate
simbolic-link-uri = 0

key_buffer_size = 16M
key_cache_division_limit = 70
tmp_table_size = 16M
max_heap_table_size = 16M

query_cache_size = 64M
query_cache_type = 1
query_cache_limit = 2M

long_query_time = 0,5
slow_query_log_file = /var/log/mysql-slow.log
slow_query_log = 0
skip-InnoDB
thread_cache_size = 4
table_cache = 128

Qcache_hits 44614
Qcache_inserts 1396

(Qcache_inserts / Qcache_hits) * 100% = 3,1%, chiar și așa.

Qcache_inserts - apare atunci când nu există nici o cerere în memoria cache și datele cache sunt învechite, și anume am lezim la disc, obținem datele și stochează în baza de date cache.

Qcache_hits - în cazul în care cererea a fost în cache-ul și l-am obține din memorie.

Cat este mai mic raportul (Qcache_inserts / Qcache_hits) - cu atât mai bine. Mai puține date este preluat de pe disc, iar mai multe date sunt preluate din memoria cache.

În cazul dumneavoastră de eficiență de 50%. În acest caz, există suficientă memorie. Se pare că ai schimba datele din tabel și toate cache-uri pentru acest tabel este eliminat.

De exemplu, pozițiile de masă poștale.
Memoria cache o grămadă de tip de date
selectați * din postul unde id = 1
selectați * din postul unde id = 2
selectați * din postul unde id = 3
selectați * din postul unde id = n

Dar, de îndată ce ai pus într-un post nou la baza de date sau actualizate la orice post de ceva, apoi resetați toate aceste cache-uri.

Apropo, ai long_query_time = 0.5 - nu va funcționa. MySQL poate logare numai interogări de mai mult de 1 secundă. adică, acest parametru trebuie să fie mai mare decât 1.