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;