Ich habe einen MySQL 5.1-Server mit einer Datenbank von ca. 450 Tabellen und 4 GB Speicherplatz. Die überwiegende Mehrheit dieser Tabellen (alle bis auf 2) sind MyIsam. Dies war größtenteils in Ordnung (Transaktionen sind nicht erforderlich), aber die Anwendung verzeichnete einen Anstieg des Datenverkehrs und bestimmte Tabellen waren aufgrund der Tabellensperrung bei Aktualisierungen betroffen. Das ist der Grund, warum 2 der Tabellen jetzt InnoDB sind.
Die Konvertierung für die kleineren Tabellen (100.000 Zeilen) dauert nicht lange und führt zu minimalen Ausfallzeiten. Einige meiner Tracking-Tabellen nähern sich jedoch 50 Millionen Zeilen. Gibt es eine Möglichkeit, ALTER TABLE...ENGINE InnoDB
große Tische zu beschleunigen ? Und wenn nicht, gibt es andere Methoden zur Konvertierung, um Ausfallzeiten für diese schreiblastigen Tabellen zu minimieren?
quelle
Antworten:
Lassen Sie mich mit den Worten beginnen: Ich hasse ALTER. Es ist böse, IMHO.
Angenommen, dies ist Ihr aktuelles Tabellenschema.
Hier ist der Pfad, den ich empfehle -
Erstellen Sie ein neues Tabellenobjekt, das das alte ersetzt:
Fügen Sie alle Zeilen der alten Tabelle nach Namen in die neue Tabelle ein:
Rauch teste deine Migration:
Tauschen Sie die Tabellennamen aus, damit Sie für den Fall, dass ein Rollback erforderlich ist, ein Backup erstellen können.
Fahren Sie mit den Regressionstests fort.
Dieser Ansatz wird bei Tabellen mit mehreren Indizes und Millionen von Zeilen immer bevorzugter.
Gedanken?
quelle
ALTER TABLE
es länger dauern alsINSERT INTO...SELECT
bei 50 Millionen Zeilen?1) Verlustschutz ist eine Funktion der Paranoia. Machen Sie immer ein Backup. Wenn Sie wirklich paranoid sind, erstellen Sie eine Sicherungskopie und stellen Sie sie von der Sicherungskopie wieder her.
2) Diese Seite des MySQL-Handbuchs enthält Anweisungen zum Konvertieren von Tabellentypen.
3) PostgreSQL führt eine Volltextsuche durch , die Sphinx- Engine scheint dies für MySQL zu tun
quelle
Es ist X-mal einfacher, den gesamten Server (Speicherkonfiguration, Caches, Indizes) zu optimieren, wenn nur eine Engine verwendet wird. Das Mischen von myisam mit innodb in großen Datenbanken wird immer irgendwann hängen bleiben, wenn Kompromisse eingegangen sind, damit beide Engines funktionieren (aber nicht exzellent :)
Ich empfehle Ihnen, sich für einige spezielle Volltextsuchmaschinen wie Sphinx , Lucene ( Solr ) zu interessieren und diese aus der Datenbankebene zu entfernen .
quelle