Zrychlete svůj web pomocí MySQL Query Caching
Jedním z nejlepších způsobů, jak urychlit vaši webovou aplikaci, je povolit ukládání dotazů do paměti ve vaší databázi, která ukládá běžně používané dotazy SQL do paměti pro prakticky okamžitý přístup na další stránku, která dělá stejný požadavek.
Důvodem, proč je tato metoda tak silná, je, že nemusíte provádět žádné změny ve své webové aplikaci, musíte jen obětovat trochu paměti. To neopraví všechny vaše problémy, ale určitě to nemůže ublížit.
Poznámka: Pokud vaše aplikace často aktualizuje tabulky, pak bude mezipaměť dotazů neustále vyčištěna a nebudete mít z toho příliš mnoho nebo žádný užitek. To je ideální pro aplikaci, která většinou čte proti databázi, například blogu WordPress. To také nebude fungovat, pokud používáte sdílený hosting.
Povolit ukládání do mezipaměti pomocí spouštění serveru
První věc, kterou budete chtít udělat, je ujistit se, že instalace MySQL ve skutečnosti obsahuje podporu dotazu pro ukládání do mezipaměti. Většina distribucí je, ale stejně byste měli zkontrolovat.
Tento příkaz budete chtít spustit z vaší konzoly MySQL, která vám řekne, zda je k dispozici mezipaměť dotazu.
mysql> zobrazit proměnné jako 'have_query_cache'; + ------------------ + ------- + | Variable_name | Hodnota | + ------------------ + ------- + | have_query_cache | ANO | +------------------+-------+
Nezamýšlejte to tím, že ukládání do mezipaměti dotazů je skutečně povoleno, protože většina hostitelských poskytovatelů tuto možnost ve výchozím nastavení nepovolí. Je trochu zvláštní, že moje instalace Ubuntu Feisty ji již umožnila ...
Dále budeme muset zkontrolovat a zjistit, zda je povoleno ukládání do mezipaměti dotazů. Potřebujeme zkontrolovat více než jednu proměnnou, takže můžeme to všechno provést najednou tak, že zkontrolujeme proměnnou dotazu%
mysql> zobrazit proměnné jako 'dotaz%'; + ------------------------------ + --------- + | Variable_name | Hodnota | + ------------------------------ + --------- + | dotaz_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 | +------------------------------+---------+
Zde jsou důležité položky v seznamu a jejich význam:
- query_cache_size - Toto je velikost mezipaměti v bajtech. Nastavení této hodnoty na 0 bude účinně deaktivovat ukládání do mezipaměti.
- query_cache_type - Tato hodnota musí být zapnuta nebo 1 pro ukládání dotazů do mezipaměti.
- query_cache_limit - Jedná se o dotaz maximální velikosti (v bajtech), který bude uložen do mezipaměti.
Pokud je hodnota query_cache_size nastavena na hodnotu 0 nebo ji chcete změnit, budete muset spustit následující příkaz, přičemž nezapomeňte, že hodnota je v bajtech. Například pokud byste chtěli alokovat do mezipaměti 8MB, použijeme jako hodnotu 1024 * 1024 * 8 = 8388608.
SET GLOBAL dotaz_cache_size = 8388608;
Podobně mohou být další možnosti nastaveny stejnou syntaxí:
SET GLOBAL dotaz_cache_limit = 1048576;SET GLOBALquery_cache_type
= 1;
Teď jak můžeme říci, zda skutečně funguje? Příkaz SHOW STATUS můžete použít k vytažení všech proměnných, které začínají "Qc", abyste se podívali na to, co se děje pod kapotou.
mysql> SHOW STATUS jako "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 řádků v sadě (0.00 sec)
Ve statistikách zjistíte, že mám spoustu volné paměti. Pokud váš server zobrazuje spoustu nízkých švestek, možná budete muset uvažovat o zvýšení této hodnoty, ale neudělal bych příliš mnoho paměti pro ukládání dotazů do webového serveru ... potřebujete mít k dispozici paměť pro apache, php, ruby nebo bez ohledu na to, co používáte.
Povolit v souboru Config
Pokud chcete, aby tyto změny přežily restartování nebo restartování serveru mysql, musíte je přidat do konfiguračního souboru /etc/mysql/my.cnf pro MySQL. Všimněte si, že může být na jiném místě ve vaší instalaci.
Otevřete soubor pomocí textového editoru v sudo nebo kořenovém režimu a přidejte tyto hodnoty, pokud v souboru již neexistují. Pokud existují, stačí je rozložit.
query_cache_size = 268435456 query_cache_type = 1 dotaz_cache_limit = 1048576
Ukládání do mezipaměti dotazu může výrazně zlepšit rychlost vaší webové aplikace, zejména pokud aplikace většinou čte. Monitorujte stav pomocí výše uvedených metod a zjistěte, jak to funguje v průběhu času.