Konfiguration und Performance

Hallo

Ich habe PGSQL von einem alten Rechner auf einem neuen Server (64bit, Windows Server 2008 mit 8 CPUs und 18GB) “migriert”.

Nächtlich wird ein Datenimport und über mehrere Stunden eine “Umstrukturierung” der Daten mittels pgSQL durchgeführt.

Nun möchte ich natürlich in den Konfigurationsfiles das Optimum an Performance herausholen.

Mir ist aufgefallen das weder die CPUs noch Memory wirklich stark belastet werden. Am Intensivsten scheint das Logging von Files in einem Subdirectory “pg_x…” zu sein - also das Schreiben auf die Disk, welches in Zusammenhang mit write ahead log zu sein scheint. Mittels fsync=off soll die performance verbessert werden.


Nun steht folgendes im Vordergrund:

  • Gibt es ein noch ausführlicheres Manual oder Publikation als die Standard Dokumentation, welches mir gut beschreibt welche Einstellungen in der postgres Konfiguration zu einer besseren Performance führt, oder zumindest wie ich anhand der Hardware ausrechnen/herausfinden kann was möglich ist?

  • Wie kann ich den Basispfad der pg_x Logs verändern? Es schreibt jetzt im Laufwerk C: und ich möchte das in einer anderen Partition?

  • Wie ist die Performance von pgSQL? Wäre es evtl sinnvoller mittels einer geigneten Sprache wie C++ meine intensiven Datenänderungen durchzuführen (Es sind diverse Rekursionen und Schleifen) ?
    Oder gibt es gar Einstellungsmöglichkeiten pgSQL noch performanter zu machen?


    Besten Dank für Tipps zu und Links oder ähnliches dazu.

eisenstein

In der postgresql.conf gibt es etliche Parameter zum einstellen, insbesondere zur Speichernutzung. Ohne Änderung dort wird PG den RAM nicht freiwillig nutzen.

Außerdem ist meines Wissens nach PG unter Kleinweich auch nur 32bit, bei der Masse am RAM wäre ein richtiges Server-OS anzuraten.

Am Intensivsten scheint das Logging von Files in einem Subdirectory “pg_x…” zu sein - also das Schreiben auf die Disk, welches in Zusammenhang mit write ahead log zu sein scheint. Mittels fsync=off soll die performance verbessert werden.

Gewehr → Schuß → Fuß. Aua.

Nun steht folgendes im Vordergrund:

  • Gibt es ein noch ausführlicheres Manual oder Publikation als die Standard Dokumentation, welches mir gut beschreibt welche Einstellungen in der postgres Konfiguration zu einer besseren Performance führt, oder zumindest wie ich anhand der Hardware ausrechnen/herausfinden kann was möglich ist?

Tonnen. Schau auf meine del.icio.us - Linkliste, schau in die Workshop-Unterlagen vom Workshop in Chemnitz, den ads gehalten hat.

  • Wie kann ich den Basispfad der pg_x Logs verändern? Es schreibt jetzt im Laufwerk C: und ich möchte das in einer anderen Partition?

Mounte doch einfach eine andere Platte dahin (nicht nur eine Partition der jetzigen, das bring exakt nix)


  • Wie ist die Performance von pgSQL?

Wie dunkel ist es im Keller?

Wäre es evtl sinnvoller mittels einer geigneten Sprache wie C++ meine intensiven Datenänderungen durchzuführen (Es sind diverse Rekursionen und Schleifen) ?

Deine Vermutung, die Performance durch komplette externe Bearbeitung außerhalb der DB zu beschleunigen, wird sich womöglich nicht erfüllen. Ist Dir bekannt, daß PG auch etliche interne Programmiersprachen hat?

Oder gibt es gar Einstellungsmöglichkeiten pgSQL noch performanter zu machen?

Massig.

08:30 < akretschmer> ??performance
08:30 < pg_docbot_adz> For information about 'performance' see:
08:30 < pg_docbot_adz> http://www.depesz.com/index.php/2007/07/05/how-to-insert-data-to-database-as-fast-as-possible/ ::
                       http://www.postgresql.org/docs/current/static/performance-tips.html :: http://www.revsys.com/writings/postgresql-performance.html
08:30 < pg_docbot_adz> http://www.powerpostgresql.com/Docs



Besten Dank für Tipps zu und Links oder ähnliches dazu.

eisenstein

Andreas

Vielen Dank für deine ausführliche Antwort. Das nutzt schön viel.

Außerdem ist meines Wissens nach PG unter Kleinweich auch nur 32bit,

Richtig, pgsql gibts da nur als 32 Bit

bei der Masse am RAM wäre ein richtiges Server-OS anzuraten.

Ja, das hätte ich mir auch gewünscht, da es auch noch einiges günstiger gekommen wäre…aber leider stand das ausserhalb meiner firmenintern zugewiesenen Kompetenz. Ich mach ja mit Postgres schon einen Weg den niemand da versteht ;-).


Schönen Sonntach
eisenstein

Nun, du kannst ja einfach mal sagen, dass die Datenbank von dem vielen vorhandenen Speicher nur 3 GB nutzen lann … vielleicht hilft das schon als Argument.

Das kann ich ein Stück weit nachvollziehen, leider treffen Kompetenz und Entscheidungsgewalt nicht immer im gleichen Hirn zusammen.

Nun ja, ist halt schade, daß ein Großteil des RAMs da ungenutzt verpufft und Geld buchstäblich zum Fenster rausgeworfen wird…

Ansonsten könnte man unabhängig davon optimieren, indem man z.B. dennoch die postgresql.conf editiert und 2 oder 3 voneinander unabhängige Platten (und Controller) nutzt. (Daten, Indexe, WAL-Log).
Fsync abzuschalten ist eher der falsche Weg.

Andreas

Stimmt. Datenverluste und/oder kaputte Datenbanken zeigen kein gutes Bild, wenn man eine Software neu einführen möchte.




Andreas

Andreas

Zu viele davon hier …

Eine andere Idee wäre eventuell auch noch den Microsoft
HyperVisor zu benutzen der in den aktuellen Windows Servern
schon verbaut ist und für die älteren kostenlos nachinstallierbar
ist (Virtualisierung). Dann kannst Du unter Windows z.B ein
FreeBSD oder Linux System installieren (auch 64-Bit wenn
dein Windows Server 64-Bit ist) und somit zumindest etwas
von den 64-Bit Vorteilen von Postgres unter Linux/Unix
erschliessen.


Falls Dir das aber alles nichts hilft und die Datenbank unter
Windows 32-Bit einfach zu langsam läuft, solltest Du Dir
überlegen MSSQL einzusetzen, denn diese DB unterstützt
momentan die Windows Systeme leider noch am besten.