Was ist das beste Dateisystem für die Leistung beim Einfügen unter PostgreSQL?


20

Ich bin neugierig, ob jemand da draußen Experimente oder Vergleiche zwischen Dateisystemen und Datenbankleistung angestellt hat. Unter Linux frage ich mich, welches Dateisystem für eine Postgres-Datenbank optimal ist. Auch welche Einstellungen (Inode, etc) sind dafür ideal? Ist dies etwas, das sich aufgrund der Daten in der Datenbank drastisch unterscheiden kann?

Wenn Sie nach einer Frage zur allgemeinen Leistung von Dateisystemen / Datenbanken suchen, finden Sie in diesem Beitrag einige nützliche Informationen.

Ich möchte jedoch so viele Ratschläge wie möglich zur Leistung von Einfügungen im Gegensatz zur Leseleistung erhalten. Vielen Dank für all die tollen Antworten!


7
Das beste Dateisystem wäre mehr Speicher? ;)
Oskar Duveborn

2
+1 für Oskar. Wir sind gerade von einer Serverkonfiguration übergegangen, bei der der Arbeitsspeicher ca. 33% der Gesamtgröße der Datenbank ausmachte, zu einer neuen Maschine, bei der der Arbeitsspeicher größer war als die Größe der Datenbank. Jetzt können wir die gesamte DB im Speicher zwischenspeichern. Unsere langsamste SQL-Abfrage ist jetzt 2 Größenordnungen schneller.
KevinRae

Antworten:


14

Kaufen Sie eine Kopie von "postgresql high performance" von Greg Smith. Es ist ein großartiges Buch und in zwei oder mehr Kapiteln geht es um Festplattenhardware und Dateisysteme. Sie werden viel lernen.

Kurz gesagt: Es gibt keine kurze Antwort.

Aber ich werde versuchen zu sommerisieren:

  • Verwenden Sie ext2 erst, wenn Sie wissen, was Sie tun.
  • Beachten Sie bei ext3 die Checkpoint-Spitzen aufgrund von fsync-Aufrufen (siehe Seite 113 und 82 und 79)
  • benutze ext4 oder xfs
  • es gibt andere Möglichkeiten

Aber da Sie sich wirklich fragen, welche FS Sie verwenden sollen, sollten Sie das Buch lesen!


4
Einverstanden, das ist das Thema, das Greg sehr gut behandelt. Unter packtpub.com/sites/default/files/… finden Sie ein Beispielkapitel, in dem Sie vor dem Ausleihen oder Kaufen des Buches nachlesen können.
Sciurus

1
Komisch, als ich dieses Problem hatte, gab es das Buch nicht. Nun, ich bin wirklich dankbar für die Mühe, die Greg in dieses Buch gesteckt hat.
Elijah

Ich kaufte ein weiteres Exemplar dieses große Werk zu ehren :-)
Janning

6

Zunächst möchten Sie ein zuverlässiges Dateisystem und eine schnelle Sekunde. Was einige Optionen ausschließt ...

Leistungstests zeigen, dass XFS häufig die beste Leistung erbringt. Es gibt einige Stabilitätsprobleme, sobald Sie festplattennahe Szenarien erreicht haben. Solange Sie jedoch darauf achten, dass dies nicht geschieht, erhalten Sie eine etwas bessere Leistung.

Theoretisch benötigen Sie kein Journal-Dateisystem für das Verzeichnis pg_xlog, aber der Geschwindigkeitsunterschied ist normalerweise so gering, dass er sich einfach nicht lohnt. Für das Datenverzeichnis sollten Sie wirklich immer ein Metadaten-Journal-Dateisystem haben.


4
Möglicherweise möchten Sie XFS verwenden, um eine Datenbank zu speichern, und zwar, weil es (bei Bedarf) Blöcke auf Null setzt, die nicht wiederhergestellt werden können.
Avery Payne

4

Datenbankverwaltungssysteme implementieren ihre eigenen Journale über die Datenbankprotokolle. Wenn Sie also ein solches DBMS auf einem Journaldateisystem installieren, wird die Leistung durch zwei Mechanismen beeinträchtigt:

  1. Redundantes Journalling erhöht die Festplattenaktivität

  2. Das Layout der physischen Festplatte kann fragmentiert sein (obwohl einige Journalling-Dateisysteme über Mechanismen zur Bereinigung verfügen).

  3. Eine hohe Festplattenaktivität kann das Journal füllen und zu falschen Bedingungen führen, wenn die Festplatte voll ist.

Ich habe vor einigen Jahren einen Fall gesehen, in dem dies auf einem LFS-Dateisystem bei einer Baan-Installation auf einer HP / UX-Box durchgeführt wurde. Das System hatte anhaltende Leistungs- und Datenbeschädigungsprobleme, die nicht diagnostiziert wurden, bis jemand feststellte, dass die Dateisysteme mit LFS formatiert waren.

Volumes, die Datenbankdateien enthalten, weisen normalerweise eine geringe Anzahl großer Dateien auf. DBMS-Server verfügen normalerweise über eine Einstellung, die konfiguriert, wie viele Blöcke in einer einzelnen E / A gelesen werden. Kleinere Zahlen wären für hochvolumige Transaktionsverarbeitungssysteme geeignet, da sie das Zwischenspeichern redundanter Daten minimieren würden. Größere Zahlen wären für Systeme wie Data Warehouses geeignet, die viele sequentielle Lesevorgänge durchführen. Stellen Sie die Blockgröße für die Dateisystemzuordnung nach Möglichkeit so ein, dass sie der Größe des Multi-Block-Lesevorgangs entspricht, auf den das DBMS eingestellt ist.

Einige Datenbankverwaltungssysteme können Raw-Festplattenpartitionen bearbeiten. Dies führt zu unterschiedlichem Leistungszuwachs, was bei einem modernen System mit viel Speicher normalerweise weniger der Fall ist. Auf älteren Systemen mit weniger Speicherplatz zum Zwischenspeichern von Dateisystem-Metadaten waren die Einsparungen bei Festplatten-E / A erheblich. Raw-Partitionen erschweren die Verwaltung des Systems, bieten jedoch die bestmögliche Leistung.

RAID-5-Volumes verursachen einen höheren Schreibaufwand als RAID-10-Volumes, sodass eine ausgelastete Datenbank mit viel Schreibverkehr auf einem RAID-10 eine bessere Leistung (oftmals eine viel bessere Leistung) aufweist. Protokolle sollten physisch getrennten Datenträgern zu den Daten hinzugefügt werden. Wenn Ihre Datenbank groß und meistens schreibgeschützt ist (z. B. ein Data Warehouse), kann es vorkommen, dass Sie sie auf RAID-5-Volumes ablegen, wenn dies den Ladevorgang nicht übermäßig verlangsamt.

Durch das Write-Back-Caching auf einem Controller können Sie einen Leistungsgewinn erzielen, und zwar auf Kosten einiger (wahrscheinlich unwahrscheinlicher, aber möglicher) Fehlermodi, bei denen Daten beschädigt werden könnten. Der größte Leistungsgewinn hierfür ist bei stark zufälligen Zugriffslasten. Wenn Sie dies tun möchten, sollten Sie die Protokolle auf einem separaten Controller ablegen und das Write-Back-Caching auf den Protokolldatenträgern deaktivieren. Die Protokolle weisen dann eine bessere Datenintegrität auf, und ein einzelner Fehler kann nicht sowohl das Protokoll- als auch das Datenvolumen entfernen. Auf diese Weise können Sie aus einer Sicherung wiederherstellen und aus den Protokollen ein Rollforward durchführen.


Zapfen Daten degradiert Leistung; Journalling-Metadaten sollten im schlimmsten Fall nur minimale und höchstwahrscheinlich fast keine Auswirkungen haben. Es wird davon abgeraten, Metadaten nicht zu protokollieren.
niXar

Ich denke, Sie haben den Artikel falsch verstanden. Jedes Dateisystem verfügt über Dateisystem-Metadaten, und jeder Datenverkehr auf der Festplatte erfordert das Lesen oder Schreiben dieser Daten. Moderne Computer verfügen normalerweise über genügend RAM, um die Metadaten dieses Dateisystems problemlos zwischenzuspeichern, ältere Computer jedoch nicht. Dies bedeutete, dass Festplattenzugriffe einen erheblichen zusätzlichen E / A-Aufwand verursachten (die häufig genannte Zahl für Oracle war ein Leistungseinbruch von 30% gegenüber unformatierten Partitionen), um die Metadaten des Dateisystems zu lesen oder zu aktualisieren. Auf einem modernen System mit mehr RAM werden die Metadaten des Dateisystems mit größerer Wahrscheinlichkeit zwischengespeichert, sodass der Overhead geringer ist.
ConcernedOfTunbridgeWells

Dies enthält einige gute allgemeine Ratschläge, die ich jedoch abgelehnt habe, weil sie auch Informationen enthalten, die für Postgresql- und moderne Journaled-Dateisysteme irrelevant oder falsch sind.
Sciurus

3

Ich habe so einen ausführlichen Bericht gemacht, aber er ist nur auf Französisch . Wenn Sie Französisch lesen oder mit automatischen Übersetzungstools zufrieden sind, können Sie die Methode wiederverwenden und selbst ausführen.

Zusammenfassung: Ich habe pgbench verwendet. Der Linux-I / O-Scheduler ist für die Leistung sehr unwichtig und das Dateisystem nur wenig. Wenn Sie es eilig haben, wählen Sie einfach die Standardeinstellung. Ich habe mich für JFS entschieden.


2

Dateisystem ist nur ein Teil des Problems. Sie können eine deutliche Leistungssteigerung erzielen, indem Sie Ihren IO-Scheduler ändern. Glücklicherweise ist dies ziemlich einfach zu testen, da Sie den IO-Scheduler im laufenden Betrieb ändern können. Ich empfehle, jeden für ein paar Tage unter typischer Last zu testen, um die beste Leistung zu erzielen.


Meine Benchmarks haben sich beim Ändern des E / A-Schedulers kaum geändert, wahrscheinlich, weil jedes DBMS bereits einen eigenen Scheduler hat.
Bortzmeyer

MySQL kommt unter hoher Last mit dem Deadline Scheduler viel besser zurecht.
David Pashley

2

Ich habe vor ein paar Monaten ein paar Tests gemacht:

Ich hatte ein kleines Testprogramm, das 50 Threads erstellte, wobei jeder Thread 1000 (oder 10000) Zeilen in dieselbe Tabelle einfügte.

  • Mit der Datenbank auf EXT3 und einem RAID5 mit 4 Festplatten dauerte es 50 Sekunden.
  • Mit der Tabelle auf der Ramdisk (mit Tablespace) dauerte es noch 50 Sekunden. Der Grund, warum es nicht schneller war, ist, dass alles im Verzeichnis pg_xlog protokolliert ist, das sich noch auf demselben RAID 5 befand.
  • Ich habe das pg_xlog auf ein RAID0 mit 4 Festplatten (Stripe) verschoben und das gleiche Programm in 40 Sekunden ausgeführt.
  • Zu Testzwecken habe ich das pg_xlog auf die Ramdisk verschoben und hatte alles andere auf dem EXT3 4 Disk RAID. Das Programm wurde nach weniger als 5 Sekunden beendet.

Das pg___xlog auf einer Software-Ramdisk zu haben, ist jedoch keine Option: Wenn Sie den Inhalt des Verzeichnisses pg_xlog verlieren, wird postgres nicht gestartet. (Es gibt jedoch Hardware-RAM-Disks mit Batterie-Backup, die von Interesse sein könnten.)

IMHO: Verwenden Sie das Dateisystem, mit dem Sie am besten vertraut sind, für die Datenbankdateien. Verschieben Sie den pg_xlog (mit einem Symlink, siehe Dokumentation) auf das schnellste Gerät, das Sie haben.


1
pgbench macht etwas Ähnliches und ist in den meisten Installationen enthalten.
Avery Payne

0

Ich habe gesehen, dass ich mich daran erinnert habe, dass ein optimiertes FreeBSD im Gegensatz zu anderen Betriebssystemen ein bisschen mehr Leistung bringt. Obwohl ich mir sicher bin, dass diese Information veraltet ist und wahrscheinlich in erster Linie ein Mythos ist. Sie können es aber trotzdem ausprobieren, siehe diese Anleitung für die Kernel-Einstellungen: http://developer.postgresql.org/pgdocs/postgres/kernel-resources.html

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.