Ich habe eine 100G + innodb-Tabelle, die in einer Produktionsumgebung gelöscht werden muss. Ich versuche dies ohne Unterbrechung des Dienstes zu tun.
Die Tabelle wird nicht mehr beschrieben und muss gelöscht werden, um Speicherplatz freizugeben. Meine MySQL-Version ist 5.1.52.
Was ist die erwartete Auswirkung auf die Leistung, während diese Tabelle gelöscht wird? Ich dachte daran, es langsam zu verkleinern, indem ich Zeilen löschte und dann optimierte. Durch Optimieren wird jedoch eine Kopie der Tabelle erstellt, sodass die Festplatten-E / A genauso intensiv ist, wenn nicht sogar mehr.
performance
mysql-5.1
sreimer
quelle
quelle
Antworten:
Das Löschen in Stapeln und das anschließende Optimieren ist wirklich das Schlimmste, was Sie tun können. Jedes Löschen wird als Transaktion ausgeführt und jede Optimierung kopiert effektiv die Überreste der riesigen Tabelle.
Stellen Sie sich das so vor. Sie haben eine 5-Gig-Tabelle, löschen 0,5 Gigs, optimieren (4,5-Gig-Datei kopieren), löschen 0,5 Gigs (4,0-Gig-Datei kopieren) usw.
Tatsächlich ist der mit jeder Optimierung verbundene Overhead viel mehr als nur das Kopieren so vieler Daten in ein Dateisystem, da es gleichbedeutend ist mit dem Einfügen all dieser Zeilen in eine neue Tabelle und dem damit verbundenen Transaktions-Overhead.
Das Löschen einer Tabelle sollte der effizienteste Weg sein, dies zu tun
Bearbeiten: Hier sind einige gründliche Benchmarks
http://www.mysqlperformanceblog.com/2011/04/20/drop-table-performance/
quelle