Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL optimiert die INSERT-Geschwindigkeit, die aufgrund von Indizes verlangsamt wird

Wenn Sie schnelle Inserts wünschen, brauchen Sie als Erstes die richtige Hardware. Das setzt ausreichend RAM, eine SSD statt mechanischer Laufwerke und eine ziemlich leistungsstarke CPU voraus.

Da Sie InnoDB verwenden, möchten Sie es optimieren, da die Standardkonfiguration für langsame und alte Maschinen ausgelegt ist.

Hier ist eine großartige Lektüre über die Konfiguration von InnoDB

Danach müssen Sie eines wissen - und das ist, wie Datenbanken intern ihre Arbeit erledigen, wie Festplatten funktionieren und so weiter. Ich werde den Mechanismus in der folgenden Beschreibung vereinfachen:

Eine Transaktion ist MySQL, das darauf wartet, dass die Festplatte bestätigt, dass es die Daten geschrieben hat. Aus diesem Grund sind Transaktionen auf mechanischen Laufwerken langsam, sie können 200-400 Eingabe-Ausgabe-Operationen pro Sekunde ausführen. Übersetzt bedeutet das, dass Sie mit InnoDB auf einem mechanischen Laufwerk etwa 200 Einfügeabfragen pro Sekunde erhalten können. Natürlich dies ist eine vereinfachte Erklärung , nur um zu skizzieren, was passiert, es ist nicht der vollständige Mechanismus hinter der Transaktion .

Da eine Abfrage, insbesondere diejenige, die der Größe Ihrer Tabelle entspricht, in Bezug auf Bytes relativ klein ist, verschwenden Sie effektiv wertvolle IOPS für eine einzelne Abfrage.

Wenn Sie mehrere Abfragen (100 oder 200 oder mehr, es gibt keine genaue Zahl, müssen Sie testen) in einer einzigen Transaktion verpacken und diese dann festschreiben, erzielen Sie sofort mehr Schreibvorgänge pro Sekunde.

Percona-Jungs erreichen 15.000 Inserts pro Sekunde auf einer relativ billigen Hardware. Selbst 5.000 Einfügungen pro Sekunde sind nicht schlecht. Die Tabelle wie Ihre ist klein, ich habe Tests an einer ähnlichen Tabelle (3 Spalten mehr) durchgeführt und es geschafft, ohne merkliche Probleme auf 1 Milliarde Datensätze zu gelangen, indem ich eine 16-GB-RAM-Maschine mit einer 240-GB-SSD (1 Laufwerk, kein RAID, zu Testzwecken verwendet).

TL;DR:- Folgen Sie dem obigen Link, konfigurieren Sie Ihren Server, holen Sie sich eine SSD, verpacken Sie mehrere Einfügungen in 1 Transaktion und profitieren Sie. Und schalten Sie die Indizierung nicht aus und wieder ein, sie ist nicht immer anwendbar, da Sie irgendwann Verarbeitungs- und E/A-Zeit aufwenden werden, um sie zu erstellen.