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

Osvědčený postup pro vytváření indexů v tabulkách MySQL – Rolling Index Builds

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:

  1. Vytvoření indexu přímo na hlavním serveru
  2. 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 Tweet

Automatizace 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!


  1. Položky ORDER BY se musí objevit ve výběrovém seznamu, pokud příkaz obsahuje operátor UNION, INTERSECT nebo EXCEPT (SQL Server)

  2. Dynamický SQL vs uložená procedura

  3. Vkládání MySQL z jedné databáze do druhé

  4. Jak fungují indexy MySQL?