sql >> Database teknologi >  >> RDS >> Mysql

MySQL-optimering af INSERT-hastigheden bliver bremset på grund af indekser

Hvis du vil have hurtige indsatser, er den første ting du skal bruge ordentlig hardware. Det forudsætter tilstrækkelig mængde RAM, en SSD i stedet for mekaniske drev og en ret kraftig CPU.

Da du bruger InnoDB, er det du ønsker at optimere det, da standardkonfigurationen er designet til langsomme og gamle maskiner.

Her er en god læsning om konfiguration af InnoDB

Derefter skal du vide én ting – og det er hvordan databaser gør deres ting internt, hvordan harddiske fungerer og så videre. Jeg vil forenkle mekanismen i følgende beskrivelse:

En transaktion er MySQL, der venter på, at harddisken bekræfter, at den har skrevet dataene. Det er derfor, transaktioner er langsomme på mekaniske drev, de kan udføre 200-400 input-output operationer i sekundet. Oversat betyder det, at du kan få 200ish insert-forespørgsler pr. sekund ved at bruge InnoDB på et mekanisk drev. Dette er naturligvis en forenklet forklaring , bare for at skitsere, hvad der sker, det er ikke den fulde mekanisme bag transaktionen .

Da en forespørgsel, især den, der svarer til størrelsen på din tabel, er relativt lille målt i bytes - spilder du i virkeligheden dyrebar IOPS på en enkelt forespørgsel.

Hvis du samler flere forespørgsler (100 eller 200 eller mere, der er ikke noget nøjagtigt antal, du skal teste) i en enkelt transaktion og derefter begår den - du vil øjeblikkeligt opnå flere skrivninger pr. sekund.

Percona-fyre opnår 15k indsættelser i sekundet på en relativt billig hardware. Selv 5k indsættelser i sekundet er ikke dårligt. Tabellen som din er lille, jeg har lavet tests på en lignende tabel (3 kolonner mere), og det lykkedes mig at nå 1 milliard poster uden mærkbare problemer ved at bruge 16gb ram-maskine med en 240GB SSD (1 drev, ingen RAID, bruges til testformål).

TL;DR:- følg linket ovenfor, konfigurer din server, få en SSD, pak flere indstik i 1 transaktioner og profit. Og slå ikke indeksering fra og til, det er ikke altid anvendeligt, for på et tidspunkt vil du bruge tid på behandling og IO på at bygge dem.



  1. Er det muligt at udføre krydsdatabaseforespørgsler med PostgreSQL?

  2. Oracle pivot med underforespørgsel

  3. Er der en måde at se en forberedt forespørgsel, da den vil blive udført på databasen?

  4. Sorten, der spilder til niveau 15.000