Optimalizálása caching mysql lekérdezés

Elkapta a átadása tárhely. nalopatil sok információt az adatbázis MySQL. Ugyanakkor úgy döntöttem, hogy egy kicsit optimalizálni működése támogatása, beleértve a cache-t.

A telepítés után a MySQL már támogatja cache-lekérdezéseket, de ez alapértelmezés szerint ki. Az alapértelmezett beállítások a következők:







cache mérete nulla. Válassza ki a cache mérete 32 MB, meg kell adni egy sort my.conf (szekció [mysqld]):

Ne indítsa újra a MySQL-szerver, valamint a jelenlegi konfiguráció ki a következő lekérdezés root:

mysql> meghatározott @ [a] globális [dot] lekérdezés _cache_size = 32 * 1024 * 1024;
Query OK, 0 érintett sorok (0.00 mp)

Egy másik lehetőség, ami kell figyelni - ez query_cache_limit - ez határozza meg a maximális összeget a lekérdezés eredményének, amely lehet elhelyezni a gyorsítótárban.

Állapotának ellenőrzése a cache lehet a következő lekérdezést:

  • Qcache_free_memory - az összeg a lefoglalt memória cache.
  • Qcache_hits - a kérelmek száma teljesítette a gyorsítótárból.
  • Qcache_inserts - beszúrja a kérelmek száma a cache.
  • Qcache_lowmem_prunes - száma kibocsátások memória miatt a teljességet a gyorsítótárat.
  • Qcache_not_cached - a kérelmek száma, amelyeket nem lehet a gyorsítótárban.
  • Qcache_queries_in_cache - a kérelmek száma a cache most.

Számítsuk efektivnost gyorsítótárazás lehet a következő képlet: Qcache_hits / (Qcache_inserts + Qcache_not_cached).







Tulajdonképpen ez az idő, hogy csoda, hogy pontosan milyen a gyorsítótárat. Ez nagyon egyszerű. Minden alkalommal, amikor egy lekérdezés, mint SELECT számított hash összege a kérelem vonal és felnézett a cache. Ha van - ruzeltat visszatért a cache - ha nem, akkor futtasson egy lekérdezést, és az eredményt a cache (feltéve, hogy az eredmény már nem query_cache_limit értékek).
Minden kérés típusa UPDATE, CSERE, INSERT, DELETE, csonkítása vagy az ALTER, eltávolítjuk a cache minden lekérdezést asztal felújítása.

Azt is érdemes megjegyezni néhány jellemzője caching, nevezetesen:

  • A különbség határozza szó kéréseket, akik készek az összehasonlító regiszter. Ezért SELECT * FROM hírek és select * from hírek cache két különböző kéréseket.
  • A cache mindig megkapja a lekérdezés eredményének egészének, az eredmények az al-lekérdezések nem cache.
  • Cache ugyanúgy működik lekérdezések táblákon különböző tárolási motorokhoz.
  • A lekérdezések száma nem lehet cache:
    • Kéri, hogy tartalmazzák a nem-determinisztikus függvények: NOW (). SLEEP (). Rand (). CURTIME (). LAST_INSERT_ID () pulzáló
    • Lekérdezések függvények segítségével a tárolt eljárásokat, felhasználó által megadott.
    • Lekérdezések használó lokális változó.
    • Lekérdezések, amely az adatbázissal mysql vagy INFORMATION_SCHEMA.
    • Lekérdezések, például SELECT. FOR UPDATE, SELECT. IN SHARE MODE. SELECT. INTO OUTFILE. SELECT. INTO DumpFile. SELECT * FROM. AHOL autoincrement_col IS NULL.
    • Lekérdezések segítségével ideiglenes táblák.
    • Lekérdezések, amelyeket nem jegyeznek a táblázatokban.
    • Lekérdezések generáló figyelmeztetések (figyelmeztetések).
    • Ha a felhasználónak nincs joga, hogy az egész táblát, de csak egy bizonyos oszlopában. Ez a kivétel - annak a ténynek köszönhető, hogy egy lekérdezés cache minden felhasználó számára, és azt a hozzáférési jogok cache ellenőrzik csak a tábla szinten.

Ha azt szeretnénk, hogy kérés ne a cache, használt SQL_NO_CACHE irányelvet. amely után közvetlenül elhelyezve a SELECT utasításban. Egy példakénti kiviteli alakja egy ilyen lekérdezés:

mysql> SELECT SQL_NO_CACHE username FROM mail_users;




Kapcsolódó cikkek