Máte-li v tabulkách MySQL vhodné indexy, můžete výrazně zvýšit výkon SELECT dotazů. Věděli jste však, že přidávání indexů do vašich tabulek je samo o sobě nákladnou operací a její dokončení může trvat dlouho v závislosti na velikosti vašich tabulek? Během této doby také pravděpodobně zaznamenáte snížený výkon dotazů, protože vaše systémové prostředky jsou také zaneprázdněny prací na vytváření indexu. V tomto příspěvku na blogu diskutujeme o přístupu k optimalizaci procesu vytváření indexu MySQL tak, aby to neovlivnilo vaše běžné pracovní zatížení.
Vytvoření klouzavého indexu MySQL
Tento přístup nazýváme „Vytváření rolovacího indexu“ – pokud máte sadu replik MySQL master-slave, můžete index vytvářet postupně jeden uzel po druhém. Index byste měli vytvořit pouze na podřízených uzlech, aby nebyl ovlivněn výkon hlavního serveru. Když je vytvoření indexu na podřízených zařízeních dokončeno, snížíme úroveň aktuálního masteru a povýšíme jednoho z slave, který je aktuální, jako nový master. V tuto chvíli pokračuje vytváření indexu na původním hlavním uzlu (který je nyní podřízeným). Nastane krátká doba (desítky sekund), během níž ztratíte připojení k databázi kvůli převzetí služeb při selhání, ale to můžete překonat opakováním na úrovni aplikace.
Výhody výkonu při vytváření klouzavého indexu
Udělali jsme malý experiment, abychom porozuměli výkonnostním výhodám vytváření klouzavého indexu.
Test využíval datovou sadu MySQL vytvořenou pomocí Sysbench, která měla 3 tabulky s 50 miliony řádků. Vygenerovali jsme zátěž na hlavním serveru MySQL s 30 klienty s vyváženým pracovním zatížením (50 % čtení a 50 % zápisů) po dobu 10 minut a zároveň jsme vytvořili jednoduchý sekundární index na jedné z tabulek ve dvou scénářích:
- Vytvoření indexu přímo na hlavním serveru
- Vytvoření indexu na podřízeném zařízení
Konfigurace testovacího zařízení MySQL
Typ instance MySQL | Instance EC2 m4.large s 8GB RAM |
---|---|
Typ nasazení | Sada 2 uzlů Master-Slave se semisynchronní replikací |
Verze MySQL | 5.7.25 |
Výsledky výkonu
Scénář | Propustnost pracovní zátěže (počet dotazů za sekundu) | 95. percentil latence |
---|---|---|
Vytvoření indexu na Master | 453,63 | 670 ms |
Vytvoření rolovacího indexu | 790,03 | 390 ms |
Také s sebou
Spuštěním vytváření indexu přímo na hlavním serveru MySQL jsme mohli zažít pouze 60 % propustnosti, které bylo dosaženo spuštěním vytváření indexu na podřízeném zařízení MySQL prostřednictvím operace postupné operace. Latence 95. percentilu dotazů byla také 1,8krát vyšší, když k vytvoření indexu došlo na hlavním serveru.
Osvědčený postup pro vytváření indexů ve vašich #MySQL tabulkáchClick To TweetAutomatizace vytváření klouzavého indexu
ScaleGrid automatizuje vytváření Rolling Index Creation pro vaše nasazení MySQL pomocí jednoduchého uživatelského rozhraní pro jeho spuštění.
Ve výše uvedeném uživatelském rozhraní můžete vybrat název databáze a tabulky a „Přidat index“ jako operaci změny tabulky. Poté zadejte Název sloupce a Indexový název a bude vygenerován a zobrazen příkaz Alter Table. Jakmile kliknete na Vytvořit, vytvoření indexu bude probíhat postupně jeden uzel po druhém.
ScaleGrid navíc také podporuje další jednoduché operace Alter Table, jako je přidávání nového sloupce do tabulky postupným způsobem. Zůstaňte naladěni na můj další příspěvek na blogu s dalšími podrobnostmi!