Urýchliť svoju webovú lokalitu pomocou ukladania do vyrovnávacej pamäte MySQL
Jedným z najlepších spôsobov, ako urýchliť svoju webovú aplikáciu, je umožniť ukladanie do vyrovnávacej pamäte dotazu vo vašej databáze, ktorá ukladá bežne používané SQL dotazy do pamäte pre prakticky okamžitý prístup na ďalšiu stránku, ktorá robí rovnakú požiadavku.
Dôvodom, prečo je táto metóda taká silná, je, že nemusíte robiť žiadne zmeny vo vašej webovej aplikácii, stačí len obetovať trochu pamäti. To nebude riešiť všetky vaše problémy, ale určite to nemôže ublížiť.
Poznámka: Ak vaša aplikácia často aktualizuje tabuľky, potom sa bude cache dopytu neustále odstraňovať a z toho nebudete mať veľa alebo žiaden prínos. Ideálne je pre aplikáciu, ktorá väčšinou číta proti databáze, napríklad blogu WordPress. To tiež nefunguje, ak používate zdieľaný hosting.
Povoliť ukladanie do vyrovnávacej pamäte s spustením servera
Prvá vec, ktorú budete chcieť urobiť, je uistiť sa, že vaša inštalácia MySQL má v skutočnosti podporu dotazu pre ukladanie do vyrovnávacej pamäte. Väčšina distribúcií to robí, ale mali by ste sa tak isto pozrieť.
Tento príkaz budete chcieť spustiť z konzoly MySQL, ktorá vám povie, či je k dispozícii možnosť ukladania do pamäte cache.
mysql> Zobraziť premenné ako 'have_query_cache'; + ------------------ + ------- + | Variable_name | Hodnota + ------------------ + ------- + | have_query_cache | ÁNO +------------------+-------+
Nerobte to tým, že znamená, že ukladanie do vyrovnávacej pamäte je skutočne povolené, pretože väčšina poskytovateľov hostingu to predvolene nepovolí. Zvláštne, moja inštalácia Ubuntu Feisty už bola povolená ...
Ďalej budeme musieť skontrolovať a zistiť, či je zapnuté ukladanie do pamäte cache. Musíme skontrolovať viac ako jednu premennú, takže môžeme všetko urobiť naraz tak, že skontrolujeme premennú dotazu%
mysql> Zobraziť premenné ako 'query%'; + ------------------------------ + --------- + | Variable_name | Hodnota + ------------------------------ + --------- + | query_alloc_block_size | 8192 | | query_cache_limit | 1048576 | | query_cache_min_res_unit | 4096 | | query_cache_size | 8388608 | | query_cache_type | ON | | query_cache_wlock_invalidate | OFF | | query_prealloc_size | 8192 | +------------------------------+---------+
Tu sú dôležité položky v zozname a čo znamenajú:
- query_cache_size - Toto je veľkosť vyrovnávacej pamäte v bajtoch. Nastavenie tejto hodnoty na hodnotu 0 účinne zakáže ukladanie do vyrovnávacej pamäte.
- query_cache_type - Táto hodnota musí byť zapnutá alebo 1, ak chcete, aby sa v predvolenom nastavení povolilo ukladanie do pamäte dotazov.
- query_cache_limit - Toto je dopyt maximálnej veľkosti (v bajtoch), ktorý bude uložený vo vyrovnávacej pamäti.
Ak je hodnota query_cache_size nastavená na hodnotu 0 alebo ju chcete zmeniť, budete musieť spustiť nasledujúci príkaz, pričom treba mať na pamäti, že hodnota je v bajtoch. Napríklad, ak ste chceli prideliť 8MB do vyrovnávacej pamäte, použili by sme ako hodnotu 1024 * 1024 * 8 = 8388608.
SET GLOBAL query_cache_size = 8388608;
Podobne, ostatné možnosti môžete nastaviť rovnakou syntaxou:
SET GLOBAL query_cache_limit = 1048576;SET GLOBALquery_cache_type
= 1;
Ako teraz môžeme povedať, či skutočne funguje? Môžete použiť príkaz SHOW STATUS na vytiahnutie všetkých premenných, ktoré začínajú "Qc", aby ste sa pozreli na to, čo sa deje pod kapucňou.
mysql> STATUS SHOW ako "Qc%"; + ------------------------- + -------- + | Variable_name | Hodnota + ------------------------- + -------- + | Qcache_free_blocks | 65 | | Qcache_free_memory | 201440 | | Qcache_hits | 18868 | | Qcache_inserts | 2940 | | Qcache_lowmem_prunes | 665 | | Qcache_not_cached | 246 | | Qcache_queries_in_cache | 492 | | Qcache_total_blocks | 1430 | + ------------------------- + -------- + 8 riadkov v súbore (0,00 sek)
V štatistikách si všimnete, že mám dostatok voľnej pamäte. Ak váš server zobrazuje množstvo sliviek lowmem, možno budete musieť zvážiť zvýšenie tejto hodnoty, ale nepoužíval by som príliš veľa pamäte pri ukladaní do pamäte pre webový server ... potrebujete mať k dispozícii pamäť pre apache, php, ruby alebo bez ohľadu na to, čo používate.
Povoliť v súbore Config
Ak chcete, aby tieto zmeny prežili reštart alebo reštart mysql servera, musíte ich pridať do konfiguračného súboru /etc/mysql/my.cnf pre MySQL. Upozorňujeme, že môže byť na inom mieste vašej inštalácie.
Otvorte súbor pomocou textového editora v režime sudo alebo root a potom pridajte tieto hodnoty, ak v súbore ešte neexistujú. Ak existujú, stačí ich rozdeliť.
query_cache_size = 268435456 query_cache_type = 1 query_cache_limit = 1048576
Dátové ukladanie do vyrovnávacej pamäte môže výrazne zlepšiť rýchlosť vašej webovej aplikácie, najmä ak vaša aplikácia číta väčšinou. Monitorujte stav pomocou vyššie uvedených metód a zistite, ako to funguje v priebehu času.