Ich habe eine wirklich große Tabelle (ca.> 100.000.000 Zeilen und eine Größe von> 50 GB) und es wird gerade ein großer Performance-Kill. Unter dem Primärschlüssel (ID) wird ein Volltextschlüssel in einem Varchar (500) -Feld verwendet, um die MySQL-Volltextsuchoption zu verwenden.
Das Speichern und Abrufen von Zeilen in dieser Tabelle wird derzeit jedoch sehr langsam. Wie kann ich damit umgehen? Dies ist mein erstes Problem. Mein zweites Problem ist, dass das Abrufen eines Backups mit mysqldump dieser Tabelle keinen Sinn macht, da es Monate dauern würde, es wieder zu importieren. Das dritte Problem ist, dass diese Tabelle die Engine MYISAM verwendet und eine Konvertierung in INNODB ebenfalls nicht möglich ist (ich habe sie getestet und den Vorgang nach 72 Stunden abgebrochen).
Was wäre also ein guter zukunftssicherer Ansatz, um diese Tabelle zu beschleunigen, korrekt zu sichern und möglicherweise in INNODB zu konvertieren? (INNODB sollte FULLTEXT mit meiner MySQL-Version akzeptieren)
Dies ist keine einfache Frage, deren Beantwortung weitere Anstrengungen erfordert.
Veröffentlichen Sie zunächst Ihr Tabellenschema, damit die Benutzer einen genaueren Blick darauf werfen können.
Einige allgemeine Ratschläge:
Performance
Um herauszufinden , was Ihre Leistung ist das Essen, versuchen Sie Ihre Aussagen Profilierungs welche
INSERT
ing undSELECT
ing Reihen.Beispiel:
Schalten Sie den Profiler ein:
SET-Profilerstellung = 1;
Führen Sie Ihre
INSERT
oderSELECT
-Anweisung aus.Zeigen Sie das Ergebnis des Profilers an:
PROFILE ANZEIGEN;
Dies wird ungefähr so zurückgeben:
Zeigen Sie in diesem Beispiel die Details für Query_ID 30:
... und Sie werden sehen, was der langsame Teil dieser Aussage ist. Abhängig vom Grund können Sie Maßnahmen zur Optimierung des Verhaltens ergreifen, auch wenn es sich um einfache hardwarebezogene Dinge wie schnellere Festplatten usw. handelt.
Backup
Bei riesigen Tabellen wie diesen
mysqldump
dauern herkömmliche Backups nur sehr lange. Möglicherweise möchten Sie verschiedene Sicherungsstrategien in Betracht ziehen. Wenn Sie MyISAM verwenden, ist es möglicherweise viel schneller, eine dateibasierte Sicherung auf einer anderen Partition zu verwenden und die Dateien dann auf Ihr Sicherungsgerät zu verschieben. Vielleicht möchten Sie auch nach professionellen Alternativen suchen, nach Percona XtraBackup oder ähnlichen Tools.Ein anderer Ansatz wäre das Einrichten der Replikation .
InnoDB
Seit MySQL 5.6 können Sie auch in InnoDB Volltext verwenden. Es verspricht signifikante Leistungssteigerungen, die ich bisher noch nicht ausprobiert habe. Bitte beachten Sie, dass dies Ihr System in mehrfacher Hinsicht beeinflusst:
quelle
Wenn Ihre Tabelle hauptsächlich in WRITING-Aktionen (INSERT / UPDATE) verwendet wird, sollten Sie MyISAM verwenden.
Wenn Ihre Tabelle hauptsächlich für READING-Aktionen (SELECT) verwendet wird, sollten Sie InnoDB verwenden.
Sie sollten jedoch in Betracht ziehen, Ihre Tabelle zu verwalten und den Spalten einen entsprechenden Index hinzuzufügen.
quelle
Benötigen Sie alle Daten in dieser Tabelle oder können Sie einige davon löschen?
Wenn Sie Zugriff auf alle Daten benötigen, können Sie diese in ein "heißes" Set, auf das Sie regelmäßig zugreifen müssen, und ein "kaltes" Set, auf das Sie gelegentlich zugreifen müssen, unterteilen?
Welche Art von Abfragen führen Sie aus? Könnten Sie einige der Daten in einer anderen Tabelle zum Abfragen zusammenfassen? Wenn Sie beispielsweise die Anzahl der Felder abrufen, können Sie die Anzahl einfach in einer anderen Tabelle speichern / aktualisieren.
Erzählen Sie uns mehr.
quelle