Door de juiste indexen op uw MySQL-tabellen te hebben, kunt u de prestaties van SELECT-query's aanzienlijk verbeteren. Maar wist u dat het toevoegen van indexen aan uw tabellen op zich een dure operatie is en lang kan duren, afhankelijk van de grootte van uw tabellen? Gedurende deze tijd zult u waarschijnlijk ook een verslechterde prestatie van query's ervaren, aangezien uw systeembronnen ook bezig zijn met het maken van indexen. In deze blogpost bespreken we een aanpak om het aanmaakproces van de MySQL-index te optimaliseren, zodat uw normale werklast niet wordt beïnvloed.
Maken van MySQL Rolling Index
We noemen deze aanpak een 'Rolling Index Creation'. Als u een MySQL-master-slave-replicaset heeft, kunt u de index knooppunt voor knooppunt op een rollende manier maken. U moet de index alleen op de slave-knooppunten maken, zodat de prestaties van de master niet worden beïnvloed. Wanneer het aanmaken van de index op de slaves is voltooid, degraderen we de huidige master en promoveren we een van de slaves die up-to-date is als de nieuwe master. Op dit moment gaat het indexgebouw verder op het oorspronkelijke masterknooppunt (dat nu een slaaf is). Er is een korte periode (tientallen seconden) waarin u de verbinding met uw database verliest vanwege de failover, maar dit kan worden verholpen door nieuwe pogingen op toepassingsniveau uit te voeren.
Prestatievoordelen van het maken van rollende indexen
We hebben een klein experiment gedaan om de prestatievoordelen van het maken van een Rolling Index te begrijpen.
De test maakte gebruik van een MySQL-dataset die was gemaakt met Sysbench en die 3 tabellen had met elk 50 miljoen rijen. We hebben belasting gegenereerd op de MySQL-master met 30 clients die gedurende 10 minuten een gebalanceerde werkbelasting (50% lezen en 50% schrijven) uitvoerden, en tegelijkertijd een eenvoudige secundaire index op een van de tabellen gebouwd in twee scenario's:
- De index rechtstreeks op de master maken
- De index op de slave maken
MySQL-testbedconfiguratie
MySQL-instantietype | EC2 instantie m4.large met 8GB RAM |
---|---|
Implementatietype | 2-node master-slave-set met semisynchrone replicatie |
MySQL-versie | 5.7.25 |
Prestatieresultaten
Scenario | Werklastdoorvoer (query's per seconde) | 95e percentiel latentie |
---|---|---|
Index maken op Master | 453.63 | 670 ms |
Aanmaken van rollende index | 790.03 | 390 ms |
Afhalen
Door het maken van indexen rechtstreeks op de MySQL-master uit te voeren, konden we slechts 60% van de doorvoer ervaren die werd bereikt door het maken van indexen op de MySQL-slave via een rollende bewerking uit te voeren. De latentie van het 95e percentiel van zoekopdrachten was ook 1,8 keer hoger toen de index werd gemaakt op de hoofdserver.
Beste werkwijze voor het maken van indexen op uw #MySQL-tabellenKlik om te tweetenHet maken van de Rolling Index automatiseren
ScaleGrid automatiseert het maken van de Rolling Index voor uw MySQL-implementatie met een eenvoudige gebruikersinterface om het te starten.
In de bovenstaande gebruikersinterface kunt u uw database- en tabelnaam selecteren en 'Index toevoegen' als de bewerkingstabel wijzigen. Geef vervolgens een kolomnaam en indexnaam op, en er wordt een Alter Table Command voor u gegenereerd en weergegeven. Zodra u op Maken klikt, wordt het maken van de index knooppunt voor knooppunt op een rollende manier uitgevoerd.
Bovendien ondersteunt ScaleGrid ook andere eenvoudige Alter Table-bewerkingen, zoals het op een rollende manier toevoegen van een nieuwe kolom aan uw tabel. Blijf op de hoogte voor mijn vervolgblog met meer details!