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

Die Leistung von MySQL Insert lässt bei einer großen Tabelle nach

Sie haben nicht gesagt, ob es sich um ein Testsystem oder eine Produktion handelt; Ich nehme an, es ist die Produktion.

Es ist wahrscheinlich, dass Sie die Tabelle auf eine Größe gebracht haben, bei der ihre Indizes (oder die ganze Menge) nicht mehr in den Speicher passt.

Dies bedeutet, dass InnoDB während des Einfügens Seiten einlesen muss (abhängig von der Verteilung der Indexwerte Ihrer neuen Zeilen). Das Lesen von Seiten (Random Reads) ist sehr langsam und sollte nach Möglichkeit vermieden werden.

Partitionierung scheint die naheliegendste Lösung zu sein, aber die Partitionierung von MySQL passt möglicherweise nicht zu Ihrem Anwendungsfall.

Sie sollten auf jeden Fall alle möglichen Optionen in Betracht ziehen - stellen Sie die Tabelle auf einen Testserver in Ihrem Labor, um zu sehen, wie sie sich verhält.

Ihr Primärschlüssel sieht für mich so aus, als ob er möglicherweise nicht erforderlich ist (Sie haben einen anderen eindeutigen Index), also ist es eine Option, ihn zu eliminieren.

Berücksichtigen Sie auch das Innodb-Plugin und die Komprimierung, dies wird Ihren innodb_buffer_pool weiter bringen.

Sie müssen Ihre Anwendungsfälle wirklich analysieren, um zu entscheiden, ob Sie all diese Daten tatsächlich behalten müssen und ob eine Partitionierung eine sinnvolle Lösung ist.

Änderungen an dieser Anwendung führen wahrscheinlich zu neuen Leistungsproblemen für Ihre Benutzer, daher sollten Sie hier wirklich vorsichtig sein. Wenn Sie eine Möglichkeit finden, die Einfügeleistung zu verbessern, ist es möglich, dass dadurch die Suchleistung oder die Leistung anderer Operationen verringert wird. Sie müssen einen gründlichen Leistungstest auf Produktionshardware durchführen, bevor Sie eine solche Änderung freigeben.