Hallo,
ich habe ein Problem mit der Performance eines PostgreSQL 8.4-Servers unter OpenSuSE 10.3. auf einem Dual-Core AMD Opteron 2GHz Rechner.
Ich habe auf 8 Nodes eines Clusters parallel ein Programm laufen, dabei schreiben alle diese Rechner (jeder etwa alle 10 bis 30 Sekunden) über Tage hinweg Daten in eine gemeinsam genutzte PostgreSQL-DB auf dem Server. Die Einträge sind jeweils nur kurze Texteinträge, also keine Bilder, Videos oder ähnliches. Um einen Eintrag durchzuführen muss in einigen Fällen vorher mit einfachen SELECT-Queries getestet werden, ob ein bestmimter Wert schon in der DB ist. Auch nichts großes.
Dennoch ist das Bottleneck der Aktion momentan der DB-Server! Um genau zu sein, dessen CPU, wie man hier sieht. (Man beachte die Werte der PostgreSQL-Prozesse in der %CPU-Spalte!)
Irgendwas läuft erheblich falsch. Woran kann es liegen? Falsche Serverconfiguration? Ich benutze die Standard-PostgreSQL Configfiles von SuSE 10.3. Ich habe sie gerade nicht hier (bin mittlerweile zu Hause), kann sie aber bei Bedarf morgen früh gerne posten.
Ich habe außerdem den Eindruck, dass es anfangs besser lief und die Performacne mit der Zeit schlechter geworden ist. Hier ist der Load des Clusters kurz nach dem Start der Aktion. Alle ixion-Rechner sind Nodes und tragen die Daten auf den Server ganz unten rechts rechts ein. Nach ein paar Tagen sieht es allerdings so aus. Wie man sieht, rechnen die Nodes die meiste Zeit schon gar nicht mehr, weil sie sehr lange auf den DB-Server zu warten scheinen. In den ersten 2 Stunden wurden ~1600 Datensätze eingetragen, heute wurden in 6 Stunden 600 Datensätze eingetragen (es dauern nicht alle Berechnungen gleich lang, aber so groß sind die Unterschiede nicht und bei der Anzahl sollten sich lange und kurze definitiv ausgleichen).
Kann die CPU-Last dadurch kommen, dass das Programm irgendwelche Ressourcen auf dem Server verschwendet (dass es zB Connections nicht zu macht)? Man beachte allerdings, dass der RAM-Verbrauch nicht ansteigt und noch tonnenweise RAM da ist.
Außerdem ist komisch, dass meine Test-Queries sofort und schnell beantwortet werden, wenn ich mich über SSH auf den DB-Server einlogge, psql starte und Queries tippe.
Ich bin ratlos. Hat jemand eine Idee? Auf welche Config-Optionen oder Logfile-Einträge sollte ich achten?