sql >> Databáze >  >> RDS >> Mysql

Tipy na ladění výkonu MySQL pro optimalizaci databáze

Structured Query Language (SQL) je speciální programovací jazyk používaný k ukládání, manipulaci a získávání dat z databáze. Našel uplatnění v mnoha relačních databázových systémech včetně MySQL, Postgres, Oracle, SQL Server a dalších.

Pomocí příkazů SQL mohou vývojáři snadno provádět různé funkční databázové operace, jako je vytváření, aktualizace a mazání dat.

Vzhledem k tomu, že objemy dat rostou a technologie se stávají stále složitějšími, je stále důležitější správně optimalizovat databáze MySQL, aby poskytovaly zkušenosti koncovým uživatelům a snižovaly náklady na infrastrukturu. Nástroje pro ladění výkonu MySQL mohou pomoci databázovým profesionálům rychle identifikovat úzká hrdla, zaměřit se na nedostatečné operace prostřednictvím kontroly plánů provádění dotazů a eliminovat jakékoli hádanky.

S přidanou složitostí rostoucích objemů dat a neustále se měnícím pracovním zatížením je nyní k maximalizaci využití zdrojů a výkonu systému nezbytné ladění výkonu databáze a optimalizace dotazů MySQL.

Existuje několik důvodů, proč je ladění SQL pro vývojáře trochu složité. Za prvé vyžaduje rozsáhlé technické znalosti k sepsání a pochopení různých prováděcích plánů. Za psaní čistých a úplných SQL příkazů je odpovědný ten, kdo je důkladně zná.

Kromě své složitosti je ladění velmi časově náročné. Protože když musíte třídit velké množství příkazů SQL, přináší to trochu nejistoty, abyste zjistili, které příkazy musíte vyladit a které byste měli nechat. A i když je každé prohlášení jiné, jejich přístup k ladění se také liší podle jejich příslušných funkcí.


Připravte se na aktualizaci Core Web Vitals

Ebook, který zrychlí váš web, než začnete ztrácet návštěvnost.

Děkuji

Váš seznam je na cestě do vaší doručené pošty.


V tomto tutoriálu budu diskutovat o tom, jak zlepšit výkon MySQL pomocí několika užitečných tipů pro ladění výkonu. Podívejme se na ně podrobně níže:

Výhody ladění výkonu MySQL

Hlavní výhodou identifikace faktoru, který řídí výkon databáze, vám umožní vyhnout se nadměrnému poskytování a snížit náklady správnou velikostí vašich serverů. Poskytuje vám také přehled o tom, zda přesun datového úložiště nebo přidání kapacity serveru přinese zlepšení výkonu či nikoli, a pokud ano, o kolik.

Ladicí databáze pro optimalizaci výkonu dotazů MySQL nepřichází s bledými problémy. Jakmile je však databáze správně vyladěna, poskytuje hodnotné výsledky výkonu se skvělými funkcemi. Nejenže snižuje nežádoucí zatížení úloh, ale také optimalizuje databázi MySQL pro rychlejší načítání dat.

Také by se vám mohlo líbit: Výkonnostní tipy PHP pro optimalizaci vašich webových stránek

Optimalizace dotazů pomocí pokynů k optimalizaci dotazů MySQL

Postupujte podle těchto doporučených postupů pro ladění výkonu MySQL a optimalizaci rychlosti databáze.

Nejprve zajistěte indexaci všech predikátů v klauzulích WHERE, JOIN, ORDER BY a GROUP BY. WebSphere Commerce klade velký důraz na indexování predikátů za účelem zvýšení výkonu SQL. Protože nesprávné indexování SQL dotazů může způsobit prohledávání tabulek, které nakonec vede k problémům se zamykáním a dalším problémům.

Proto velmi doporučuji indexovat všechny predikátové sloupce, aby databáze mohla zažít optimalizaci dotazů MySQL.

Také by se vám mohlo líbit: Laravel Performance Optimization Guide

Vyhněte se používání funkcí v predikátech

Databáze nepoužívá index, pokud má ve sloupci předdefinovanou nějakou funkci.

Například:

SELECT * FROM TABLE1 WHERE UPPER(COL1)='ABC'Copy

Kvůli funkci UPPER() databáze nepoužívá index na COL1. Pokud neexistuje způsob, jak se této funkci v SQL vyhnout, budete muset vytvořit nový index založený na funkcích nebo budete muset vygenerovat vlastní sloupce v databázi, abyste zlepšili výkon.

Nepoužívejte zástupný znak (%) na začátku predikátu

Predikát LIKE '%abc' způsobí úplné skenování tabulky. Například:

SELECT * FROM TABLE1 WHERE COL1 LIKE '%ABC'Copy

Ve většině případů toto použití zástupných znaků přináší velká omezení výkonu.

Vyhněte se zbytečným sloupcům v klauzuli SELECT

Místo použití ‚SELECT *‘ vždy určete sloupce v klauzuli SELECT, abyste zlepšili výkon MySQL. Protože zbytečné sloupce způsobují dodatečné zatížení databáze, zpomalují její výkon i celý systematický proces.

Pokud je to možné, použijte vnitřní spojení, namísto vnějšího spojení

Vnější spojení používejte pouze v případě potřeby. Jeho zbytečné používání nejen omezuje výkon databáze, ale také omezuje možnosti optimalizace dotazů MySQL, což má za následek pomalejší provádění příkazů SQL.

DISTINCT a UNION používejte pouze v případě, že je to nutné

Použití operátorů UNION a DISTINCT bez jakéhokoli většího účelu způsobuje nežádoucí řazení a zpomalení provádění SQL. Místo UNION přináší použití UNION ALL větší efektivitu procesu a přesněji zlepšuje výkon MySQL.

Klauzule ORDER BY je v SQL povinná, pokud očekáváte seřazený výsledek

Klíčové slovo ORDER BY seřadí sadu výsledků v předdefinovaných sloupcích příkazů. Ačkoli tento příkaz přináší výhody správcům databáze pro získávání setříděných dat, má také malý dopad na výkon při provádění SQL. Protože dotaz nejprve potřebuje seřadit data pro vytvoření konečné sady výsledků, což způsobuje trochu složitou operaci při provádění SQL.

Také by se vám mohlo líbit: Jak spojit dvě tabulky v MySQL

Nepoužívejte MySQL jako frontu

Fronty mohou ovlivnit výkon vaší databáze přímo od jádra a mohly by se dostat do databází vaší aplikace bez vašeho vědomí. Pokud například nastavujete stav pro konkrétní položku, aby k ní měl přístup „relevantní proces“, neúmyslně vytváříte frontu. Dělá to tak, že zvyšuje dobu načítání pro přístup ke zdroji bez jakéhokoli většího důvodu.

Fronty způsobují problémy ze dvou hlavních důvodů. Serializují vaši pracovní zátěž, zabraňují dokončení úloh paralelně a často vedou k tabulce, která obsahuje rozpracovanou práci a také historická data z již dokončených úloh. Nejen, že přidává aplikaci latenci, ale také brzdí ladění výkonu MySQL.

Také by se vám mohlo líbit: Jak používat Redis pro řazení do front

Pochopte čtyři základní zdroje

K vytvoření databázových funkcí potřebujete čtyři základní zdroje. CPU, disk, paměť a síť. Pokud některá z těchto funkcí nefunguje správně, má to v konečném důsledku vliv na databázový server a má za následek slabý výkon.

Abyste správně porozuměli základním zdrojům, musíte se zaměřit na dvě konkrétní oblasti, tj. výběr správného hardwaru a odstraňování problémů s ním.

Při výběru hardwaru pro databázi MySQL se vždy ujistěte, že používáte všestranné výkonové komponenty. Nejen, že se rozhodnete pro to nejlepší ze zásobníku, ale také se ujistěte, že by mezi nimi měla být správná rovnováha. Často jsme viděli, že organizace mají tendenci vybírat si servery s rychlými CPU a velkými disky, ale pletou se s nedostatkem paměti, která nakonec zabije výkon.

V některých scénářích je přidání paměti velmi podstatné pro zlepšení výkonu, pokud jde o velikost. Vypadá to trochu neintuitivně, ale ve většině případů má nadměrné využití disků přímý vliv na výkon databáze. Nedostatek dostatečné paměti pro uložení dat serveru se ukazuje jako nákladný při snižování výkonu databáze.

Pokud jde o odstraňování problémů, vždy mějte pod kontrolou výkon všech čtyř základních zdrojů. Kvalitativně ověřte, že fungují podle potřeb zlepšení norem. Pravidelné zvažování tohoto auditu rychle vyřeší závažné problémy.

Dotazy na stránkování

Aplikace, které stránkují, mají tendenci shazovat server. Při zobrazení stránky s výsledky s odkazem na přechod na další stránku se tyto aplikace obvykle seskupují a třídí způsoby, které nemohou používat indexy, a využívají funkci LIMIT a offset, která způsobí, že server udělá spoustu generování práce a poté zahození řádků.

Optimalizace najdete v samotném uživatelském rozhraní. Namísto zobrazení přesného počtu stránek ve výsledcích a odkazů na jednotlivé stránky můžete pouze zobrazit odkaz na další stránku. Můžete také zabránit tomu, aby lidé chodili na irelevantní stránky.

Na straně dotazu můžete místo použití LIMIT s posunem vybrat o jeden řádek více, než potřebujete, a když uživatel klikne na odkaz „další stránka“, můžete tento poslední řádek určit jako výchozí bod pro další sadu výsledků. . Pokud například uživatel zobrazil stránku s řádky 101 až 120, budete muset vybrat také řádek 121; pro vykreslení další stránky byste se serveru zeptali na řádky větší nebo rovné 121, limit 21.

Optimalizace poddotazů MySQL

Nejdůležitější rada, kterou vám ohledně poddotazů mohu dát, je ta, že pokud je to možné, musíte preferovat připojení, alespoň v aktuálních verzích MySQL.

Poddotazy jsou předmětem intenzivní práce týmu optimalizátorů a nadcházející verze MySQL mohou mít více optimalizací poddotazů. Sledujte, která z optimalizací skončí ve vydaném kódu a jak velký rozdíl přinesou. Jde mi o to, že „preferovat připojení“ není rada pro budoucnost. Server je neustále chytřejší a případů, kdy mu musíte říkat, jak něco udělat, místo toho, jaké výsledky vrátit, je stále méně.

Mezipaměť dotazů Mysql

Jedním z nejdůležitějších aspektů měření výkonu je ukládání obsahu do mezipaměti. MySQL poskytuje mezipaměť databázových dotazů, která ukládá text příkazu SELECT a načtený výsledek do mezipaměti. Kdykoli tedy vytvoříte duplicitní databázi, zavoláte mezipaměť dotazů MySQL, odpoví vám a zobrazí výsledek z mezipaměti a žádné volání nebude opakovaně analyzováno. Tímto způsobem můžete maximalizovat proces optimalizace mezipaměti MySQL.

Chcete-li nastavit mezipaměť dotazů MySQL, musíte do MySQL přidat několik nastavení. Nejprve musíte pomocí následujícího příkazu zkontrolovat, zda je k dispozici mezipaměť dotazů:

mysql> SHOW VARIABLES LIKE 'have_query_cache';

Tím se zobrazí výsledek, ANO. To znamená, že mezipaměť MySQL funguje dobře.

+------------------+-------+

| Variable_name    | Value |

+------------------+-------+

| have_query_cache | YES   |

+------------------+-------+

Nyní můžete nastavit velikost a typ mezipaměti dotazů MySQL. Pamatujte, že minimální výchozí velikost je 40 kB. Maximální velikost může být 32 MB. MySQL query_cache_size můžete nastavit pomocí následujícího příkazu:

mysql> SET GLOBAL query_cache_size = 40000;

Typ mezipaměti dotazu může určit chování všech připojení. Můžete také zakázat mezipaměť dotazů pro dotazy jako:

mysql> SET SESSION query_cache_type = OFF;

Můžete také nastavit hodnoty jako 0,1 a 2 pro nastavení stavu připojení.

Použít Memcached pro ukládání do mezipaměti MySQL

Memcached je distribuovaný systém ukládání do mezipaměti. Zrychluje webové stránky s velkými dynamickými databázemi tím, že ukládá databázový objekt do dynamické paměti, aby se snížil tlak na server, kdykoli externí zdroj dat požaduje čtení. Vrstva Memcached snižuje počet žádostí databáze.

Memcached ukládá hodnoty (v) s klíčem (k) a načítá hodnoty (v) s klíčem (k), aniž by musel analyzovat databázové dotazy a vyhýbal se všem těmto potížím.

Chcete-li si přečíst více o Memcached, můžete si přečíst průvodce, jak nastavit Memcache v php.

Skončilo to!

Tento článek poskytuje podrobný popis osvědčených postupů pro optimalizaci databází a užitečné tipy pro ladění výkonu MySQL, které musí znát každý vývojář. Je to kompletní průvodce pro ty backendové vývojáře, kteří si nejsou jisti špatným výkonem databáze a potřebují nějaké praktické techniky k optimalizaci databáze MySQL od jádra.

Pokud chcete k tématu přidat své myšlenky nebo se chcete zeptat na nějaké otázky týkající se tohoto tématu, neváhejte napsat své komentáře do sekce komentářů.


  1. Jak vrátit seznam dostupných znakových sad v MySQL

  2. Najděte 2. nejvyšší plat nejlepšími možnými způsoby

  3. Klonovat ORACLE_HOME

  4. Chyba serveru SQL 4104:Vícedílný identifikátor nelze svázat.