Performance - Postgres auf Windows XP als Server

Hallo an Alle !

Ich weiß das Windows keine besonders gute Voraussetzung für eine schnelle Datenbankanwendung ist. Aber dennoch ist es halt so!:roll:

Leider gibt es einige Probleme in Sachen Performance!
Der Zugriff auf Tabellen (z.B. ca 250000 Einträge) ist beim Select * from … sehr langsam, hier ca. 2min.:?


Kennt jemand die Probleme, gibt es Möglichkeiten Speicher zu reservieren bzw. generell bereit zustellen?

Server: Pentium 4 - 3 GHZ mit 1 GB RAM

Habe schon die Möglichkeiten von der postgres - Homepage (glaub FAQ Abschnitt 3.6) ausprobiert, aber ohne merklichen Erfolg.:cry:


Ich hoffe, ich konnte mit den paar Punkten eine Diskussion anstossen.

Bis bald, hier im Forum.

JoJo :roll:

Guten Morgen,


Wie viele Spalten hat den deine Tabelle?

Select * from… solltest du nach möglichkeit vermeiden.
Besser wäre Select spaltenname_1, spaltenname_2…
Wenn du größere Datenmengen oder gar Blobs drin hast kann so ein abfrage sehr sehr lange dauern.

Zumal wozu willst du alle 250000 Datenmsätze auf einmal selektieren?

Anonstsne kann ich dir da nicht viel helfen, hal ein Linux nutzer :wink:

Crypi

Du hast mehrere Möglichkeiten, als erstes würde ich versuchen, herauszufinden, warum das so lange dauert. Nimm mal deinen Query, tipp ihn in die psql Shell und setz ein EXPLAIN davor. Dann siehst du, was die Datenbank mit dem Query anstellen würde.
Als nächstes, hast du schon mal an einen Index auf einige Spalten gedacht? Obwohl, wenn du alle Daten selectest, bringt der nichts nachdenk

Ändern sich die Daten in dieser Tabelle häufiger? Wenn ja, lass mal ein VACUUM laufen, das löscht alte Datenbestände, die noch in der Tabelle liegen.

Und letztendlich: du musst bedenken, das beim Selecten von 250000 Einträgen auch alle diese Daten über das Netzwerk zu dir kommen müssen, das nimmt, je nach Datenumfang, auch nicht wenig Zeit in Anspruch.

Ja, leider kann ich an der speziellen Tabelle nichts ändern, da es Ausgangsdaten sind, und diese als Schreibgeschütz gelten müssen. Somit fällt die Sache mit dem Index flach.

Natürlich ist das select * from … ungünstig, damit verschaffe ich mir einen Überblick über die Daten, aber das Problem erstreckt sich auch auf andere Anweisungen (Problem mit insert und update ist bekannt).

Eine Überlegung meinerseits war es den shared memory zu erhöhen, aber diese führte zu keinem meßbaren Erfolg.

Desweiteren habe ich die Wartung mit Vacuum durchgeführt auch mit weniger Erfolg, beruht darauf das diese Daten nicht geändert werden, nur ausgelesen.

Es gibt verschiedenste Einstellungsmöglichkeiten in den Konfigurationsdateien, nun denke bzw. hoffe ich das da der Pudelskern liegt, um eine bessere Performanze des Server zu bekommen. Kennt jemand eine ausführliche Aufschlüsselung der Konfig. - Dateien mit jeweiligen Auswirkungen der Veränderungen der Variablen?

Die Datenbank an sich hat jetzt schon 1 Million Einträge und das Projekt ist im Prototyp - Status, wenn es dann mal richtig laufen sollte ist mit ca. 12 - 20 Millionen Einträge zu rechnen. Wogegen dann natürlich die Hardware Ressourcen und das Betriebssystem den Anforderungen angepasst werden.

Der Vorteil von Postgres ist neben dem OpenSource Status seine gute Geschwindigkeit und das Handling mit grossen Datenbanken. Darum haben wir uns eigentlich für diesen Datenbanksystem entschieden.
Naja, ich hoffe das sich da noch was ändert.

Nebenbei mein pgadmin spinnt, kennt ihr das Problem der schwarzen Eigenschaftsfenster, ich sehe nur schwarz mit den Eingabefelder und Tabs?

Falls noch jemand einen guten Einfall und sachlichen Kommentar zum Thema hat, würde ich das begrüssen.

Bis bald hier im Forum!

jojo

Hmm, mit einem Index änderst du nicht deine Daten, diese bleiben weiterhin bestehen. Der Index stellt nur einen zusätzlichen Mechanismus zur Verfügung, bestimmte Daten schneller zu finden … Analog einem Index in einem Buch.
Darauf zu verzichten wäre ein Fehler.

Zu dem Pgadmin Problem kann ich leider nichts sagen.

Die Datenbank an sich hat jetzt schon 1 Million Einträge und das Projekt ist im Prototyp - Status, wenn es dann mal richtig laufen sollte ist mit ca. 12 - 20 Millionen Einträge zu rechnen. Wogegen dann natürlich die Hardware Ressourcen und das Betriebssystem den Anforderungen angepasst werden.

Also, ich weiß ja jetzt nich was das konkret für ein Projekt ist, aber bei dieser Menge Einträge ist es sicher ratsam Aggregat-Tabellen zu erstellen und darauf gezielte Indexe zu setzen, um somit auf gewisse Informationen zu spezialisieren. Das verkleinert die jeweilige Tabelle und erhöht die Abfragegeschwindigkeit immens.

“Performant” ist auch immer so ein schwieriges Wort, wenn es einfach so in den Raum geworfen wird. Eine Abfrage von 1 Million Datensätze (wohlmöglichen noch mit einer Menge Spalten mit großen Datentypen) braucht nunmal seine Zeit. Und wenns schneller gehen muss, dann kommt eigentlich nur in Frage: die abgefragte Datenmenge reduzieren - mit WHERE Conditions oder Aggregattabellen (s.o.).

bzgl. Updates: ich mache bei uns nach jedem Update einer größeren Tabelle ein vacuum analyze auf diese. Einmal nächtens wird die komplette Datenbank “vacuum analyzed” (sorry :wink: ).

Das Postgres Handbuch gibt nützliche Informationen zu Administration - wärmstens zu empfehlen.

Hallo,

Nö, du änderst nichts an den Daten, sondern legst nur eine
Art Inhaltsverzeichnis an.

Kannst du die Daten irgendwie klassifizieren?
Dann könntest du dir Master-Slave-Tabellen (Stichwort: inheritance) anlegen, und so die abzufragende Datenmengen
reduzieren…

Wie wär’s damit:

http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html

Ciao Thomas