Performance einer Linux Postgres Installation

Ich habe eine Postgres Installation auf Linux OpenSuse.
Mit PHP via PDO schreibe ich 100 Datensätze mit zwei Feldern mit INSERT in eine Tabelle.

Benutze ich mysql als PDO Treiber, wird dieses in ca. 0.02 sek abgearbeitet.
Benutze ich nun postgres als PDO Treiber, wird dieses in ca. 1.00 sek abgearbeitet.

Bei 1000 Datensätze werden die Ausführungszeiten länger, so braucht Postgres nun 10 sek, MySQL nur 0.2 sek

Das gleiche auf einen Windows 7 System zeigt jedoch keinen nennenswerten Performanceunterschied zwischen Postgres und MySQL.
Frage: Hat jemand eine Idee warum Linux-Postgres System mit ‘angezogener Handbremse’ läuft?

Es muss was grundsätzliches in der Konfiguration sein.
Ich danke im voraus für eure Mühen und Ideen, woran es liegen könnte.

Vermutlich machst Du immer eine einzelne Transaktion. Masseninserts faßt man in eine TX zusammen, oder noch besser, als COPY.
Auf dem Windows-System vermute ich mal, daß da fsync() Dir ins Gesicht lügt, hatten wir IIRC erst vor wenigen Tagen hier (oder einem anderen Forum?)

In der Tat ich mache eine einzelne Transaktion. Nichtsdestotrotz ist das eben der Testcase. Irgendwas muss das was mit Konfiguration zu tun haben. Ich habe nämlich die Defaulteinstellungen benutzt. Und da hatte ich gehofft, dass ich einen Hinweis bekomme, wo ich da was optimieren kann bzw. einstellen sollte.

Du kannst fsync() ausschalten, dann wird das deutlich schneller gehen - kapott.

Btw.: was für eine Engine unter MySQL, Blackhole oder MyISAM?

Du kannst fsync() ausschalten, dann wird das deutlich schneller gehen - kapott.

Das war die Lösung… Aber was bedeutet das ‘kapott’ ? Wird da das Dateisystem beschädigt? oder welchen Nachteil erkauft man sich bei diesen Geschwindigkeitszuwachs?

Beachte die Arbeitsweise von PG:

  • Du speicherst einen Datensatz
  • Du sacht impliziet oder expliziet COMMIT
  • PG schreibt das WAL und WARTET (!) darauf, daß das OS sagt: ‘Daten geschrieben’. Das passiert, wenn fsync() fertig ist
  • nun erst bekommt die Anwendung gesagt: ‘Daten geschrieben’

fsync off:

  • Du speicherst einen Datensatz
  • Du sacht impliziet oder expliziet COMMIT
  • PG schreibt das WAL und wartet NICHT (!) auf fsync()
  • Anwendung bekommt sofort gesagt: ‘Daten geschrieben’

Bei fsync = off bekommt die Anwendung also eine Lüge. Stürzt das System ab, ist es im Eimer.