Ist es üblich, InnoDB- und MyISAM-Tabellen auf demselben Server zu mischen?


21

Ich habe eine einzelne Datenbank von ca. 4,5 GB auf einem Server mit 8 GB RAM. Die überwiegende Mehrheit der Tabellen besteht aus MyIsam (ungefähr 4,3 GB), aber ich werde bald einige von ihnen in InnoDB konvertieren . (Es wird ein langsamer Prozess, der sich zunächst auf die schreibintensivsten Tabellen konzentriert.)

Stimmt etwas nicht, wenn ein dedizierter Server ausgeführt wird, auf dem beide Arten von Speicher-Engines vorhanden sind?


Is there anything wrong with running a dedicated server where both types of storage engines exist? Vielleicht umformulieren Multiple types?
John

Der einzige Grund, warum ich "beides" sagte, ist, dass es sich bei dieser Frage um die beiden Hauptmaschinen handelt, die so konfiguriert sind, dass sie "fein abgestimmt" sind. Ich versuche, andere Motortypen wie MEMORY oder MERGE zu ignorieren, die selten genug sind, dass afaik nicht Gegenstand der Leistungsoptimierung ist.
Derek Downey

Antworten:


18

Es ist nichts Falsches daran , mehrere Speicher-Engines auf derselben physischen Maschine zu verwenden, solange Sie die Vor- und Nachteile der einzelnen Engines kennen. Es gibt Leistungsüberlegungen, Funktionseinschränkungen und Anwendungsfälle für alle Plugin-Speichertypen.

Wenn Sie beispielsweise eine kleine Tabelle haben, die zu 90% geschrieben wird, können Sie MyISAM auswählen. Wenn die Daten leicht wiederhergestellt werden können und es sich um eine kleine Tabelle handelt, beispielsweise zum Einreihen in die Warteschlange, können Sie Speicher auswählen. Wenn Sie eine Tabelle haben, die zu 90% gelesen wird, und die Daten dort sein müssen, wenn Sie danach suchen, wählen Sie wahrscheinlich eine Speicher-Engine, die Transaktionen und konfigurierbare Atomarität unterstützt, wie z. B. InnoDB. Wenn Sie über das Dateisystem auf Daten zugreifen möchten, ohne Daten zu beschädigen, wählen Sie möglicherweise CSV.

Sie können jedoch mehrere Speicher-Engines im selben Schema sowie den physischen Host sicher verwenden.

Lassen Sie mich jedoch bemerken, dass Ihre Puffer in diesem ganzen Durcheinander eine Rolle spielen. Wenn Sie sowohl MyISAM als auch InnoDB verwenden, müssen Sie darauf achten, dass Ihr key_buffer und Ihr innodb_buffer_pool nicht miteinander in Konflikt stehen. Dies erfordert von Ihrer Seite eine sorgfältige Planung, aber genau das tun wir.


4
+1 Ein weiterer häufiger Anwendungsfall ist MyISAM für Tabellen, die eine Volltextsuche erfordern, und InnoDB für alle anderen Tabellen.
Asaph

@Aseph: InnoDB hat bereits zum Zeitpunkt Ihres Kommentars Volltextindizes unterstützt .
BlueRaja - Danny Pflughoeft

2
^^^^ "MySQL 5.6 Features" war nicht GA bis 2013-02-05
randomx

1
@randymelder Nette Antwort. Könnten Sie näher erläutern, was Sie unter "Sie müssen darauf achten, dass Ihr key_buffer und Ihr innodb_buffer_pool nicht miteinander konkurrieren" verstanden haben?
Neel

1
Ich möchte mich als falsch erweisen , aber die Logik sieht hier anders aus als bei stackoverflow.com/a/6796566/5645769 .
Tᴀʀᴇǫ Mᴀʜᴍᴏᴏᴅ

7

Ich kann Ihnen nicht sagen, ob dies eine gängige Praxis ist. Ich kann über meine eigenen Erfahrungen berichten.

Ich benutze immer das beste Werkzeug für den Job, also mische ich die ganze Zeit Motoren. Die meisten meiner Projekte verwenden MyISAM als Standardmodul.

Wenn ich spezielle Funktionen benötige, die nur in InnoDB verfügbar sind, greife ich zu.

Wenn eine Tabelle größtenteils schreibgeschützt ist, wähle ich die Archivierungs-Engine, bevor ich blinken kann.

Da ich weiß, dass der Maschinenserver über genügend Arbeitsspeicher verfügt, werden alle meine temporären Daten in Heap-Tabellen gespeichert.

Ich habe in der Vergangenheit einige Verzögerungen beim Mischen von MyISAM und InnoDB gesehen, aber dies ist kein spezifisches MySQL-Problem. Es ist ein Designproblem, das nicht auftritt, wenn Sie nur einen Motor verwenden. Tatsächlich führt die Verwendung der falschen Engine zu einer stärkeren Verlangsamung, egal ob es sich nur um MyISAM, nur um InnoDB oder eine Mischung aus beiden handelt. Es ist schwierig, eine Formel zu definieren, um zu wissen, wann die Verlangsamung eintreten würde. Nur tatsächliche Tests könnten es Ihnen sagen.

Natürlich konnten Sie die Integrität und Konsistenz von InnoDB und MyISAM bei einer eindeutigen Abfrage nicht aufrechterhalten.


Die Archivierungs-Engine unterstützt keine Indizierung, weshalb Sie sie im Archiv speichern.
user4951

0

Ich versuche zu vermeiden, MyISAM- und InnoDB-Tabellen in derselben Datenbank zu mischen, aber dies dient eher der Vernunft als den praktischen Gründen. Ich finde es jedoch nützlich, eine Datenbank mit MyISAM-Tabellen für die Volltextsuche zu haben, damit ich diese auf Websites ausführen kann. Wenn Sie es in einer separaten Datenbank mit einem Fremdschlüssel für jeden Eintrag aufbewahren, können andere Entwickler, die an der Datenbank arbeiten, auf einfache Weise sehen, was los ist.


Wie können Sie einen Fremdschlüssel haben, wenn Sie MyISAM verwenden?
a_horse_with_no_name

Falsche Terminologie, funktioniert aber wie ein Fremdschlüssel. Ich speichere die ID-Nummer des Elements aus der InnoDB-Tabelle und verwende diese, um die Seitensuche im Suchergebnis durchzuführen.
Kenzo
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.