Was ist das beste Linux-Dateisystem für MySQL (InnoDB)?


48

Ich habe versucht, mit MySQL InnoDB nach Benchmarks für die Leistung verschiedener Dateisysteme zu suchen, konnte aber keine finden.

Meine Datenbank-Workload ist das typische webbasierte OLTP, etwa 90% lesen, 10% schreiben. Zufälliges IO.

Welche Dateisysteme wie ext3, ext4, xfs, jfs, Reiserfs, Reiser4 usw. sind Ihrer Meinung nach die besten für MySQL?

Antworten:


44

Wie sehr schätzen Sie die Daten?

Im Ernst, jedes Dateisystem hat seine eigenen Nachteile. Bevor ich weitermache, bin ich ein großer Fan von XFS und Reiser, obwohl ich oft Ext3 verwende. Es gibt hier also keine wirkliche Verzerrung des Dateisystems, sondern nur eine Information ...

Wenn das Dateisystem für Sie nicht viel mehr als ein Container ist, entscheiden Sie sich für das, was Ihnen die besten Zugriffszeiten bietet.

Wenn die Daten einen signifikanten Wert haben, sollten Sie XFS vermeiden. Warum? Denn wenn ein Teil einer aufgezeichneten Datei nicht wiederhergestellt werden kann, werden die Blöcke auf Null gesetzt und die Daten können nicht wiederhergestellt werden. Dieses Problem wurde in Linux Kernel 2.6.22 behoben .

ReiserFS ist ein großartiges Dateisystem, vorausgesetzt, es stürzt nie schwer ab . Die Zeitschrift Recovery funktioniert gut, aber wenn aus irgendeinem Grund Sie Ihre parition info verlieren oder die Kernblöcke des Dateisystems sind wie weggeblasen, können Sie eine quandry haben , wenn es mehrere ReiserFS - Partitionen auf einer Festplatte sind - weil der Wiederherstellungsmechanismus im Grunde die Scans Die gesamte Festplatte, Sektor für Sektor, auf der Suche nach dem, was sie "denkt", ist der Anfang des Dateisystems . Wenn Sie drei Partitionen mit ReiserFS haben, aber nur eine durchgebrannt ist, können Sie sich das Chaos vorstellen, das dadurch entsteht, wenn der Wiederherstellungsprozess ein Frankenstein-Durcheinander der beiden anderen Systeme zusammenfügt ...

Ext3 ist "langsam", in einer Art "Ich habe 32.000 Dateien und es braucht Zeit, bis sie alle laufen ls". Wenn Sie überall Tausende von kleinen temporären Tischen haben werden, werden Sie ein bisschen Trauer haben. Neuere Versionen enthalten jetzt eine Indexoption, die die Verzeichnisüberquerung drastisch reduziert, aber dennoch schmerzhaft sein kann.

Ich habe noch nie JFS verwendet. Ich kann nur kommentieren, dass jede Rezension, die ich jemals gelesen habe, etwas im Sinne von "solide, aber nicht das schnellste Kind auf dem Block" war. Es könnte eine Untersuchung wert sein.

Genug der Nachteile, schauen wir uns die Vorteile an:

XFS:

  • schreit mit riesigen Dateien, schnelle Wiederherstellungszeit
  • Sehr schnelle Verzeichnissuche
  • Primitive zum Einfrieren und Aufheben des Einfrierens des Dateisystems

ReiserFS:

  • Sehr optimaler Zugriff auf kleine Dateien
  • Packt mehrere kleine Dateien in dieselben Blöcke und spart so Speicherplatz im Dateisystem
  • schnelle Wiederherstellung, konkurriert mit XFS-Wiederherstellungszeiten

Ext3:

  • Bewährt, basierend auf gut getestetem Ext2-Code
  • Es gibt viele Werkzeuge, um damit zu arbeiten
  • Kann zur Erholung zur Not als Ext2 wieder montiert werden
  • Kann sowohl verkleinert als auch erweitert werden (andere Dateisysteme können nur erweitert werden)
  • Neueste Versionen können "live" erweitert werden (wenn Sie das wagen)

Sie sehen, jeder hat seine eigenen Macken. Die Frage ist, welches ist für Sie am wenigsten schrullig?


29
Das Problem mit XFS-NULL-Dateien wurde vor über 3 Jahren behoben. xfs.org/index.php/…
Ryan Bair

5
Es stimmt zwar, dass ich nicht die ganze Zeit auf der Welt habe, um mit den Änderungen in der Kernel-Entwicklung Schritt zu halten (neben der Arbeit und der Familie), aber es stimmt sicherlich auch, dass es knarrende alte Bereitstellungen gibt, die aktualisiert werden müssen. Ich werde jedoch eine +1 eingeben, um darauf hinzuweisen, dass die Korrektur vorgenommen wurde.
Avery Payne

13

Es kann auch erwähnenswert sein, dass Sie InnoDB ohne Dateisystem ausführen und die Leistung ohne Overhead des Dateisystems verbessern können. Ich bin mir nicht sicher, ob ich es empfehlen würde, aber ich habe es vorher ohne Probleme verwendet.

InnoDB Raw Devices

Wenn Sie 90% Lese- und 10% Schreibvorgänge ausführen und nicht die Transaktionsfähigkeit von InnoDB benötigen, sollten Sie die Portierung auf MyISAM prüfen, um eine bessere Leseleistung zu erzielen.


6
-1 für den Vorschlag, für eine bessere Leseleistung zu MyISAM zu wechseln. Hat so viele andere Mängel und Nachteile. InnoDB sollte stattdessen richtig konfiguriert sein. +1 für InnoDB-on-Raw-Gerätevorschlag.
Gertvdijk

5
Ich stehe zu meiner Aussage, MyISAM hat Nachteile, aber es gibt viel Gutes zu haben. MyISAM ist immer noch der Boss für Lese-Workloads.
Xorlev

11

Die Antworten hier sind ernsthaft veraltet und müssen aktualisiert werden, da dies in den Google-Ergebnissen angezeigt wird.

Für Produktionsumgebungen XFS. Jedes Mal. XFS wird aufgezeichnet und ist nicht blockierend. Stellen Sie sicher, dass Sie die folgenden Variablen für eine moderne (2011/2012) MySQL-Datenbank verwenden, die InnoDB in der Produktion verwendet:

innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 1 # an ACID requirement
sync_binlog = 1 # more ACID
innodb_flush_method = O_DIRECT

Verwenden Sie weder EXT3 noch EXT4. Eines Tages wird BTRFS dort ankommen.

EXT3 und vielleicht EXT4 sperren auf der Inode-Ebene, nicht schlau!

Quellen: - www.mysqlperformanceblog.com - http://dev.mysql.com/doc/internals/en/index.html - Verständnis für MySQL-Interna von Sasha Pachev - https://www.facebook.com/note.php? note_id = 10150210901610933 - http://oss.sgi.com/projects/xfs/training/ - Einige Schaukeln, Versuch und Irrtum.

EDIT: Ein Update. EXT4 scheint ab Mitte 2013 ziemlich gut abzuschneiden! BTRFS ist immer noch keine gute Option. Und RHEL könnte XFS zum neuen Standarddateisystem machen. Verwenden Sie auch hier NICHT EXT3.


Laut dem Test von Vadim Tkachenko bietet EXT4 einen Durchsatz von 20% gegenüber XFS, wenn MySQL 5.5 mit InnoDB verwendet wird. Vadim schlägt vor, die EXT4-Option 'dioread_nolock' zu verwenden, sofern verfügbar (obwohl er sie beim Test nicht verwendet hat).
Caligari

Warum ist das Sperren auf der Inode-Ebene schlecht?
Jpaugh

Die anderen Antworten sind veraltet ... jetzt, 5 Jahre später ...
Kaiser

Google "Inode Lock Contention" für die Probleme mit der Inode-Sperre.
stark

9

Die Kurzversion ist, dass die Empfehlung, die MySQL auf Dateisystemen gegeben hat, XFS am nächsten kommt. Ext3 sollte jedoch auch in Ordnung sein, ext4 verspricht eine nette Verbesserung, aber es ist immer noch nicht ganz stabil, obwohl es vor dem liegen sollte Jahresende.

Wenn Sie die Cluster-Dateisysteme CXFS, OCFS2 und GFS ausführen, sollten alle in Ordnung sein.

Ich würde dringend vor Reiser-Derivaten warnen, und JFS wurde zwar früher von XFS und ext4 geschlagen, die beide häufiger eingesetzt werden.


6

Es wird wahrscheinlich keinen großen Unterschied machen. Gehen Sie mit was auch immer Ihre Distribution als Standard verwendet, vorausgesetzt, es ist ausreichend.

Nehmen Sie sich die Mühe, andere Dinge zu optimieren - holen Sie sich genug RAM - holen Sie sich einen RAID-Controller, der nicht funktioniert - und beheben Sie die lahme (ab) Nutzung der Datenbank durch die Anwendung getan).

Überlegen Sie sich jedoch genau, auf welches Dateisystem Sie Ihr mysql-tmpdir setzen. Dies wirkt sich auf die Leistung aus, insbesondere bei Abfragen, die auf Datenträgern basierende filesort () s ausführen (weitere Informationen finden Sie unter EXPLAIN).

Ich denke, ein Dateisystem, das verzögerte Zuweisung unterstützt, ist hier sehr praktisch, da Sie IO für kurzlebige Dateien vollständig vermeiden können, wenn genügend RAM vorhanden ist, um sie im Cache zu halten. Beispielsweise macht sich XFS nicht die Mühe, Dateien zu schreiben, die gelöscht und geschlossen werden, bevor sie zugewiesen wurden.

Natürlich ist das Setzen eines tmpdir auf ein tmpfs aus Sicht der Leistung attraktiv, führt jedoch zu der Gefahr, dass der Speicherplatz erschöpft wird und Abfragen fehlschlagen, die andernfalls erfolgreich wären (obwohl temporäre Datenträgerdateien verwendet werden).


5

Ich finde keine aktuellen Artikel mit Benchmark-"Roundups" zu MySQL, die auf verschiedenen Dateisystemen ausgeführt werden. Angesichts der von Ihnen beschriebenen Arbeitsbelastung bezweifle ich, dass die Fragmentierung auf Dateiebene ein großes Problem darstellen wird. Ohne einen formalen Benchmark kann ich nichts sagen, was Sie als maßgeblich ansehen sollten, aber nach meinem Gutachten wird jedes oben erwähnte Dateisystem ungefähr im selben Baseballstadion (dh alle in der gleichen Größenordnung für Leistungszahlen) abschneiden. .

In der Datenbank läuft die Show wirklich, da das Dateisystem nur große Bereiche verwaltet, auf die die Speicher-Engine zugreift.

Trotzdem wäre es interessant, mit all diesen Dateisystemen eine Leistungsübersicht zu erstellen. (Ich bin jedoch weniger begeistert von MySQL, daher werde ich mich nicht darum kümmern. Das Benchmarking von Postgres, OTOH, könnte interessant sein ...)


1
Thee ist auch ein Duplikat von stackoverflow.com/questions/1021854/… mit einigen Referenzen, die Sie interessieren könnten
Nik

3

IMHO die erwähnenswerten verfügbaren FSs für Linux sind:

XFS (schlechte Lesegeschwindigkeit) ist bekanntermaßen ressourcenschonend und schnell bei großen Dateien, aber schlecht bei vielen kleinen Dateien.

ReiserFS (schlechte Schreibgeschwindigkeit) schont nicht die Systemressourcen, funktioniert aber mit vielen kleinen Dateien sehr gut.

EXT3 liegt dazwischen und arbeitet in allen Bereichen akzeptabel (der Grund, warum es als Standard- Linux-FS gilt).

Ich habe EXT4 noch nicht selbst verwendet, aber ich habe mich um einige Benchmarks gekümmert, und ReiserFS scheint die beste Lesegeschwindigkeit zu haben, von der Sie sagten, dass sie für Sie am wichtigsten ist.

Schauen Sie sich das an: ReserFS4 X Ext4 X Ext3

Ich würde Ext3 für seine Stabilität, Sicherheit und Reife empfehlen, aber wenn die Lesegeschwindigkeit für Sie am wichtigsten ist, sollten Sie ReiserFS in Betracht ziehen.

Denken Sie daran, dass Sie auch CPU-Auslastung, Stabilität, Sicherheit usw. berücksichtigen sollten, bevor Sie sich für einen FS entscheiden.

Und natürlich ist es immer die beste Methode, ein Pilotprojekt durchzuführen, Tests durchzuführen und Benchmarks für Ihre spezielle Umgebung durchzuführen, um festzustellen, was für Sie am besten geeignet ist.

PS: Ich hätte mehr Benchmarks gepostet, aber ich kann nicht mehr als einen Link posten.

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.