sql >> Database >  >> RDS >> Mysql

Best Practice voor het maken van indexen op uw MySQL-tabellen - Rolling Index Builds

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:

  1. De index rechtstreeks op de master maken
  2. 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 tweeten

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


  1. Krijg het huidige jaar, de huidige maand en de huidige dag in MySQL

  2. Wat is het verschil tussen een Oracle- en Microsoft-schema?

  3. Een deel van een string in SQL vervangen

  4. MariaDB JSON_LOOSE() uitgelegd