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!
Antworten:
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:
Aber da Sie sich wirklich fragen, welche FS Sie verwenden sollen, sollten Sie das Buch lesen!
quelle
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.
quelle
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:
Redundantes Journalling erhöht die Festplattenaktivität
Das Layout der physischen Festplatte kann fragmentiert sein (obwohl einige Journalling-Dateisysteme über Mechanismen zur Bereinigung verfügen).
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.
quelle
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.
quelle
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.
quelle
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.
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.
quelle
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
quelle