/ / Verbessert das Erstellen einer Tabelle mit Innodb und Partitionierung die Leistung in MySQL? - MySQL, Leistung

Wird eine Tabelle innodb und Partitionierung die Leistung in MySQL verbessern? - MySQL, Leistung

Ich habe eine Myisam-Tabelle mit zusammengesetztem eindeutigem Schlüsselvon 2 Spalten und 90 Millionen Daten. Jetzt haben wir Probleme mit dem Arbeitsspeicher und dem Laden. Nach dem Durchsuchen des Webs plane ich, diese Tabelle zu partitionieren und in Innodb zu ändern, um eine bessere Leistung zu erzielen. Aber ich habe folgende Bedenken:

  1. Ein Wechsel zu innodb hat enorme Ausfallzeiten. Kann man die Ausfallzeiten minimieren?

  2. Die meisten der ausgewählten Abfragen befinden sich in einer bestimmten Spalte des Schlüssels, für den die Hash-Partitionierung geplant ist. Inwieweit hat dies Auswirkungen auf die Abfrage in einer anderen Schlüsselspalte?

Verbessern diese Änderungen die Leistung in dem theoretisch genannten Ausmaß? Gibt es eine bessere Lösung für solche Fälle. Jeder Vorschlag oder jede Erfahrung kann hilfreich sein.

Meine Fragen sind einfach wie

Select * from Table where Col1= "Value"
Select * from Table where Col1="Value" and Col2 IN (V1,V2,V3)

Beilagen sind sehr häufig.

Antworten:

1 für die Antwort № 1

InnoDB wird wahrscheinlich hilf einigen. Die Umstellung auf InnoDB bringt einige Probleme mit sich, wie ich bereits sagte Mein Conversion-Blog.

Partitionierung an sich bringt keinen Leistungsgewinn. Mein Partitionierungsblog listet 4 Fälle auf, in denen Sie mit Designänderungen Leistung erzielen können.

Unabhängig von der Engine werden Ihre beiden Abfragen beide profitieren von

INDEX(col1, col2)

Keine Form der Partitionierung wird helfen. HASH Partitionierung ist besonders nutzlos.

Die Umstellung auf InnoDB nimmt viel Zeit in Anspruch, es sei denn pt-online-schema-change wird für Ihren Fall arbeiten. Erforsche es.

Lesen Sie auch meine Antworten und Kommentare zu Kann ich MySQL so einrichten, dass es automatisch partitioniert wird? für weitere Einzelheiten.

Es kann sein, dass das Hinzufügen dieses Index die Hauptleistungssteigerung ist. Aber du musst lange machen ALTER es bekommen. MyISAM hat nicht ALGORITHM=INPLACE.


0 für die Antwort № 2

Innodb (über Leistung sprechen wir jetzt) ​​habenSinn nur, wenn es viele Einfügungen und Aktualisierungen für Ihre Tabelle gibt, wegen der zeilenverriegelnden Tabelle. Wenn die meisten Abfragen in Ihrer Tabelle SELECTs sind, ist MyIsam schneller. Hinweis: Geben Sie in my.cnf key_buffer_size 25% Ihres freien Arbeitsspeichers ein.


0 für die Antwort № 3

Wenn Einfügungen in Ihre Datenbank sehr häufig sind,Sie werden wahrscheinlich an Leistung gewinnen, wenn Sie zu innodb wechseln, wodurch nicht ganze Tabellen zum Einfügen gesperrt werden und andere Clients gleichzeitig Daten auswählen können.

Zu Frage 1, wenn Sie sich Sorgen machenIch würde vorschlagen, dass Sie eine parallele Dump / Load-Lösung für die Migration Ihrer Daten nach innodb finden. Wenn Sie einfach eine ALTER-Anweisung für Ihre Tabellen ausführen, ist dies ein einzelner Thread-Vorgang, der viel langsamer ist.

In Bezug auf Nummer 2 müssen Sie ein Schema zusammen mit Ihrer Partitionierungsstrategie und den Fragen, um die Sie sich Sorgen machen, veröffentlichen.