ZFS tuning bei PostgreSQL.

minimike

Berufsrevolutionär
Hi

Ich will die Tage einen neuen Server aufsetzen. Neben Jboss wird PostgreSQL 9 der größte Folterknecht. Als OS habe ich FreeBSD 8.2 in Planung.
Eigendlich wollte ich alles mit ZFS machen. Aber ich möchte auch wirklich das letzte Quant rausholen. Stellt sich nun die Frage auf welchem FS ich am besten die Datenbanken speichere.
Wäre in dem Fall UFS besser wegen caching? Habt ihr evtl ein paar Tuningtips Betreff der Optimierung von ZFS sofern PostgreSQL Datenbanken darauf gespeichert werden?

Angebotene Dienste sind:

Mailserver mit DBmail und PostgreSQL Backend

Jboss 5.1 mit folgenden Anwendungen

Nuxeo DM
Nuxeo EP
Hippo HST
Apache Directory Server
GateIn
eXo WebOS
eXo Social
eXo Collaboration
Apache OfBiz

Wobei alles in PostgreSQL Datebanken gespeichert wird. Die DB's auf einem SAS Hardwareraid 1E und Jboss sowie der Mailserver auf einem Raid1 mit zwei SATA Platten.

Gesetzt dem Fall das UFS bei PostgreSQL eine bessere Performance bietet. Ist es möglich UFS auf einem ZFS Volume zu formatieren aber zu einem späteren Zeitpunkt dann noch die Größe des FS zu ändern? Und wenn ja geht das online? Zumindest das Vergrößern?

Für Anregungnen würde ich mich herzlich freuen

lg
Darko
 
Hi

Ich will die Tage einen neuen Server aufsetzen. Neben Jboss wird PostgreSQL 9 der größte Folterknecht. Als OS habe ich FreeBSD 8.2 in Planung.
Eigendlich wollte ich alles mit ZFS machen. Aber ich möchte auch wirklich das letzte Quant rausholen. Stellt sich nun die Frage auf welchem FS ich am besten die Datenbanken speichere.
Wäre in dem Fall UFS besser wegen caching? Habt ihr evtl ein paar Tuningtips Betreff der Optimierung von ZFS sofern PostgreSQL Datenbanken darauf gespeichert werden?

Angebotene Dienste sind:

lg
Darko

Zum einen... das PDF das mein Vorposter gepostet hat ist wirklich lesenswert, Uli Gräf weiss definitiv was Er schreibt.

Was Du tun solltest.....

Die optimale Blocksize von Postgresql solltest Du in jedem Fall rausfinden...
ZFS geht vom Default 128k aus.

Nehmen wir mal an... Postgresql hat die gleichen Werte wie Postgresql

Würde das ganze so aussehen...

zfs create haumichblaupool/database/postgresql
zfs set recordsize=8k haumichblaupool/database/postgresql
zfs set mountpoint=/woauchimmerderkramhinsoll haumichblaupool/database/postgresl
Was Du tun solltest... wäre z.B. die Datenbanklogs, in einen anderen Pool reinzuhängen, wir machen das z.B. bei Informix und Oracle so. Außerdem verwenden
wir dort Raw Devices. Aber ich bezweifle das dies bei Postgresql funktioniert..

Außerdem je mehr Spindeln Du unter dem Pool hast, desto schneller wird die ganze Grütze. Wenn die Kiste produktiv sein soll.. würde ich in keinem Fall nur ein Hardwareraid einsetzen.

Wieviel Platten hat den das Ding und wie großs sind Die?

Wir haben die Erfahrung gemacht.

Platten über 160Gb machen keinen Spass.. lieber kleine Platten und davon so viel wie möglich im Pool

Unsere HDS 9990 mit 30GB Platten macht die HDSS 9990v mit 160 GB Platten regelmässig nass.. bei gleichgroßen Pools. Weil mehr Platten und mehr Spindeln im Pool.

Der beste Kompromiss in unserem Fall ist immer die Mirror Konfiguration von ZFS gewesen.

Was Du testen solltest, ist ob dein ZFS mit eingeschaltetem RAID COntroller schneller oder langsamer ist... wir haben da teilweise richtig witzige Ergebnisse gekriegt. Je teurer das Equipment umso mehr Probleme gab es.Weil ZFS und Controler sich gegenseitig tot gecached haben.

Das besten in Deinem Fall wären zwei strohdoofe JBODS angebunden über FC.
So würde ich es jedenfalls machen, wenn Du Performance willst solltest Du nicht am Blech sparen.

Auf eines solltest Du noch achten, berechne die Chunks der DB großzügig, wir hatten bei Informix das seltsame Ergebnis, das 1024k nich gleich 1024k waren. Beim Einsatz von RAW Devices kam dies regelmäßig vor. Die Größe die Informix berechnet hat, war nicht die gleiche Größe die ZFS kalkuliert hat.

Bei Postgresql kann ich es nicht beurteilen, abgesehen davon, wenn ich Uli Gräfs PDF lese, scheint RAW Device für Postgresql nicht in Frage zu kommen.


Abgesehen davon....
Blogs.sun.com ist Dein bester Freund..

Siehe hier

Oder hier...

und hier....
Also der Herr Kollege hier schreibt von 8k recordsize

Leg Dir schon mal nen Taschenrechner zurecht. ;)
 
Last edited:
Ich habe 4 x Seagates SAS mit 15000 RPM, 600 GB und weniger als 2,5 milisekunden Reaktionszeit.
Des weiteren 2 x SATA mit 5400 RPM und 8,5 milisekunden Reaktionszeit.
Die teueren für die Datenbank. Und billiger Kram auf dem billigen Speicher.

Aber ich habe mich auch bei den PostgreSQL Leuten umgehört und die haben mir UFS empfohlen. Ich könnte nun auf einem ZFS Volume ein UFS FS anlegen. Aber kann ich das auch vergrößern wie EXT2/3/4 unter Linux? Auch online?
 
Ja, kann man UFS-Dateisysteme mit growfs(8) vergrößern. Allerdings nicht online und ein Backup ist vorher sehr zu empfehlen.
 
Ich habe 4 x Seagates SAS mit 15000 RPM, 600 GB und weniger als 2,5 milisekunden Reaktionszeit.
Des weiteren 2 x SATA mit 5400 RPM und 8,5 milisekunden Reaktionszeit.
Die teueren für die Datenbank. Und billiger Kram auf dem billigen Speicher.

Aber ich habe mich auch bei den PostgreSQL Leuten umgehört und die haben mir UFS empfohlen. Ich könnte nun auf einem ZFS Volume ein UFS FS anlegen. Aber kann ich das auch vergrößern wie EXT2/3/4 unter Linux? Auch online?

Nun zum einen.... würd ich Dir empfehlen nimm das womit Du Dich am besten auskennst.
Zum andren, ja man kann einen Pool vergrößern. Du kannst diesen aber nicht wieder shrinken!

Wir hatten in der Vergangenheit Szenarien, wo Kunden auch verglichen haben was für sie schneller ist. Ein Kunde von mir hat seine komplette Oracle Datenbank die produktiv auf Veritas File System lief (kein UFS sondern natives VxFS) nach ZFS repliziert.

ZFS war zu dem damaligen Zeitpunkt ganz klar einen deutclichen Zacken langsamer. Daher fiel zum damaligen Zeitpunkt die Entscheidung für Veritas.

Unabhängig davon, würd ich Dir empfehlen Dich mehr in die ZFS Gegebenheiten einzulesen, besonders wenn das ein Produktiv System sein soll. Außerdem existieren da draussen immer noch sehr viele Mythen aus den Anfangstagen von ZFS das es langsamer ist als der Rest der Welt, das ist so sicher nicht richtig und absolut vom Anwendungsfall abhängig. ZFS ist ja nicht nur ein Filesystem sondern ein Gesamtkonzept.

Eine vernünftige Entscheidung wirst Du nur fällen können, wenn Dir die Filesysteme und deren Eigenheiten besser bekannt sind.
 
ZFS Volumes haben die selben Eigenschaften wie Datein in einem ZFS Mountpoint bzgl. Allokation d.h. du wirst den Overhead von ZFS mit dem Overhead von UFS verbinden. Zwei Allokatoren und Caches die um Resourcen kämpfen ... damit wirst du keine Freude haben.
 
Back
Top