Autovacuum oder dump zurückspielen?

Konfiguration des PostgreSQL Datenbankservers.

Autovacuum oder dump zurückspielen?

Beitragvon chaosad » So 1. Mär 2009, 00:13

Hallo
ich betreibe eine PostgreSQL 8.3 unter einem Windows XP.

Ich hab hier evtl nur ein kleines Verständisproblem. Ich hab einige Daten aus meiner DB gelöscht und danach ein autovaccum mit analyze durchgeführt. Dieser sollte den gelöschten Speicherplatz ja eigentlich freigeben, was zum kleinen Teil auch geschehen ist. Das postgres Verzeichnis war danach 38,5GB groß. Ohne vacuum betrug die Größe 47GB.

Von der 38,5GB DB hab ich nun ein Backup mit pgAdmin erstellt und danach die DB via pgAdmin gelöscht und das Backup zurückgespielt. Als dies fertig war, betrug die DB allerdings nur noch 32,6GB.

Und jetzt zu meiner Frage, wie kann das sein das nach dem Neueinspielen soviel weniger Platz benötigt wird?

Meine zweite Frage ist, nach einem kompletten DB restore kann ich auch wieder viel schnelle Imports durchführen. Ich dachte das hier immer ein vacuum + analyze den gleichen Effekt erzielen?

Habt ihr evtl. noch ein paar tuning tipps? Bei der DB handelt es sich um eine einzelne DB, wenige Tabellen dafür sehr viel Inhalte. Ich hoffe das reicht aus um ein paar generelle Optimierungsvorschläge zu posten?

Danke schon mal für alles.
chaosad
Neuer Benutzer
 
Beiträge: 2
Registriert: Sa 28. Feb 2009, 23:56

Beitragvon ads » So 1. Mär 2009, 05:11

Wichtigste Frage vorneweg: hast du VACUUM oder VACUUM FULL ausgeführt zum Aufräumen? Das soll jetzt keine Aufforderung sein, dass du VACUUM FULL aufrufst, das dauert nämlich eine Weile und blockiert alles. Aber die beiden Aufrufe haben unterschiedliche Auswirkungen auf den Speicherplatz.

Zur Geschwindigkeit nach dem Restore: Nachdem die Daten frisch eingespielt sind, liegt ja alles "am Stück" vor und alle Indexes sind auf dem aktuellen Stand. Von daher ist alles recht schnell.

Zu den Tuningtipps: ein paar allgemein gehaltene Speichereinstellungen könnte man noch vorschlagen, für alles andere braucht es mehr Informationen, was du mit diesen Daten genau anstellst.
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören Bild

Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

PostgreSQL Service & Support
ads
Erfahrener Benutzer
 
Beiträge: 4147
Registriert: Mi 8. Feb 2006, 11:58
Wohnort: MD

Beitragvon chaosad » So 1. Mär 2009, 12:50

puh, ich glaub es war nur ein VACUUM hat aber insgesamt auch über 16 Stunden gedauert. Würde es denn zusätzlich was bringen wenn man vacuum full ausführt und danach reindex?

Folgende Anpassungen hab ich bisher schon ausprobiert:

shared_buffers = 256MB # min 128kB or max_connections*16kB
work_mem = 16MB # min 64kB
maintenance_work_mem = 64MB # min 1MB

checkpoint_segments = 15 # in logfile segments, min 1, 16MB each
checkpoint_timeout = 5min # range 30s-1h
checkpoint_completion_target = 1 # checkpoint target duration, 0.0 - 1.0
checkpoint_warning = 0 # 0 is off


Generell würd ich mir beim importieren der Daten etwas mehr speed wünschen. Dabei handelt es sich um Daten die von einem Programm importiert werden. Pro Import immer ca. 100k an neuen Datensätzen.

Der Rechner hat 2GB Speicher, es handelt sich dabei um ein 32bit XP Windows.
chaosad
Neuer Benutzer
 
Beiträge: 2
Registriert: Sa 28. Feb 2009, 23:56

Beitragvon ads » So 1. Mär 2009, 13:04

Ein VACUUM FULL bringt dir nichts, sperrt dafür aber die Tabelle. Dieser Befehl würde allerdings überflüssigen Speicherplatz freigeben.

shared_buffers kannst du an sich noch mal verdoppeln - wenn die Maschine dediziert für die Datenbank genutzt wird. work_mem mit 16 MB ... machst du viel Data Warehouse? Wenn du große Datenmengen einfügst, kannst du auch das maintenance_work_mem noch ein Stück erhöhen, davon profitiert dann (unter anderem) auch noch VACUUM.

Hast du max_fsm_pages und max_fsm_relations angepasst? Mittels effective_cache_size kannst du ausserdem noch angeben, wieviel Speicher das OS in der Regel zum Cachen zur Verfügung hat - das hilft aber beim Lesen, nicht beim Schreiben.

Wenn du Daten einfügst, wie genau gehst du dabei vor?

Alles in allem sind das aber zu wenige Informationen über das, was du dort machst. Du musst etwas genauer werden.
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören Bild

Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

PostgreSQL Service & Support
ads
Erfahrener Benutzer
 
Beiträge: 4147
Registriert: Mi 8. Feb 2006, 11:58
Wohnort: MD

Beitragvon akretschmer » So 1. Mär 2009, 14:58

chaosad hat geschrieben:Generell würd ich mir beim importieren der Daten etwas mehr speed wünschen. Dabei handelt es sich um Daten die von einem Programm importiert werden. Pro Import immer ca. 100k an neuen Datensätzen.


Wie kommen die Daten, als INSERT - Befehle oder als COPY? In einer einzelnen Transaktion oder jeder Datensatz mit COMMIT? Umfangreiche Indexe oder INSERT-Trigger? Im übrigen wird hin und wieder berichtet, PG laufe unter einem *NIX schneller als in einem Fenster.

Andreas
--
ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)

https://www.xing.com/profile/Andreas_Kretschmer7
Hosting-Provider mit PostgreSQL-Support gesucht? Mich fragen!
akretschmer
Erfahrener Benutzer
 
Beiträge: 5954
Registriert: So 29. Okt 2006, 14:35
Wohnort: Kaufbach, Sachsen, Germany, Germany


Zurück zu Konfiguration

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste