it-swarm-eu.dev

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

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

Ist etwas falsch daran, einen dedizierten Server zu betreiben, auf dem beide Arten von Speicher-Engines existieren?

21
Derek Downey

Es gibt nichts falsches mit der Verwendung mehrerer Speicher-Engines auf derselben physischen Maschine, solange Sie die Vor- und Nachteile der einzelnen verstehen. 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 bei der Suche vorhanden sein müssen, wählen Sie wahrscheinlich eine Speicher-Engine, die Transaktionen und konfigurierbare Atomizität unterstützt, wie z. B. InnoDB. Wenn Sie über das Dateisystem ohne schädliche Daten zugreifen möchten, können Sie CSV wählen.

Sie können jedoch sicher mehrere Speicher-Engines innerhalb desselben Schemas sowie den physischen Host verwenden.

Lassen Sie mich jedoch feststellen, 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 innodb_buffer_pool nicht miteinander konkurrieren. Dies erfordert eine sorgfältige Planung von Ihrer Seite, aber genau das tun wir.

18
randomx

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

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

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

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

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

Ich habe in der Vergangenheit einige Verlangsamungen 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. Die Verwendung der falschen Engine führt zu einer stärkeren Verlangsamung. Dabei spielt es keine Rolle, ob es sich nur um MyISAM, nur um InnoDB oder eine Mischung aus beiden handelt. Es ist schwer, 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 erhalten.

7
Maniero

Ich versuche zu vermeiden, MyISAM- und InnoDB-Tabellen in derselben Datenbank zu mischen, aber dies dient eher der Vernunft als 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, leicht sehen, was los ist.

0
Kenzo