Autovacuum läuft nur auf einer Tabelle

Hallo zusammen,

mir ist gerade bei meiner Postgre 8.4 Datenbank aufgefallen,
das der Autovacuum nur auf einer einzigen Tabelle regelmäßig durchläuft.

Bei allen anderen Tabellen wird im PG-Admin bei leztem Autovacuum gar nichts angzeigt.

Woran kann das liegen?
Falsche einstellung?

Grüße
Matrix-NTN

lässt sich ein manuelles vacuum auf den anderen tabellen ausfuehren?

laeuft ein manuelles vacuum auf der einen tabelle (die scheinbar vacuumiert wird) vollständig durch?

Ja, wenn ich ein manuelles Vacuum durchführe, läuft dies ohne weiteres durch.

Ich habe gerade noch meine config Datei durchgesehen.
Dabei ist mir folgender wert aufgefallen:

autovacuum_vacuum_cost_limit = 40

Hat das damit was zu tun? Der default wert liegt bei 200…

Grüße
Matrix

Das Kostenlimit hat nur etwas damit zu tun, wie schnell Vacuum bzw. Autovacuum laufen.

Hast du denn andere Tabellen, die sich häufig ändern? Wenn ja, in welcher Form ändern die sich?

Also bei dieser die aktuell autovacuumiert wird, werden ab und zu neue Einträge hinzugefügt aber sehr oft Datensätze geupdatet.

Dann gibt es eine Tabelle in welcher extrem oft neue Datensätze hinzugefügt werden.
Bei den restlichen Tabellen kommen nicht ganz so oft neue Datensätze hinzu



Grüße
Matrix

Nun, dann ist doch alles in Ordnung.

Vacuum hat die Aufgabe, alte und nicht mehr benötigte Speicherplätze innerhalb einer Tabelle freizugeben.

Bei einer Tabelle, die nur anwächst, gibt es logischerweise keine freizugebenden Speicherplätze. Daher gibt es doch auch keinen Autovacuum Lauf.

Du kannst dir mal die Statistiken für die Tabellen in pg_stat_user_tables anschauen, dort sind die Spalten mit dead Tuples und live Tuples interessant. Die regeln, ob Autovacuum sich die Tabelle überhaupt anschaut.

Bei einer Tabelle habe ich aber bei Live und dead tuple werte von rund 6000.
Und diese Tabelle wird nicht von Autovacuum vacuumiert…

Und wenn ich das richtig verstehe und bei dead tuple rund 6000 habe, sollte das autovacuum dennoch durchlaufen und diesen Speicherplatz freigeben oder nicht?

Grüße
Matrix

Das hängt ganz von deinen Einstellungen ab.

Hier sind die entsprechenden Berechnungen erläutert:
PostgreSQL: Documentation: Manuals: PostgreSQL 8.4: Routine Vacuuming

OK… super danke…

Ich habe das mal nachgerechnet und bemerkt, das es wegen der hohen Anzahl der Datensätze noch seh lange gehen würde.
Nun habe ich in PGAdmin gesehen, dass cih für die eine Tabelle das Autovacuum anpassen kann (stichwort Storage Parameter).

Wenn ich aber nun hier den Scale Factor etwas anpasse, wo wird dies in der DB gespeichert?
Kann man das von Hand per SQL irgenwie auslesen?

Es gibt aber 2 Reiter “Tabelle” und “Toast” welchen der beiden sollte ich anpassen(oder beide)?

Grüße
Matrix.

Du hast vorhin gesagt, dass du “live” 6000 Tuples hast … wie kommst du jetzt auf “viel”? Und wieviel Einträge hat die Tabelle genau?

Du hast 8.4, oder? Dort sind diese Werte als Storage Parameter der Tabelle hinterlegt. Wenn du die Tabelle mit pg_dump sicherst, sollten die Einstellungen dort wieder auftauchen. Natürlich stehen diese Werte auch irgendwo in den Systemtabellen - wo genau, müsste ich jetzt nachschauen.

Die Tabelle hat runde 1Mio Datensätze.
Wenn ich nun den vacuum threshold ausrechne müssten runde 300.000 Datensätze geändert worden sein, damit der autovacuum durchlaufen würde.

Ja, ich habe 8.4.
Das ich per Dump/Restore die Einstellungen von autovacuum behalte ist klar.

Wo kann ich nachschauen, wo die Storage Parameter gespeichert werden?
Per Google.de habe ich leider nicht gefunden.
Es würde mich einfach so interessieren, wie ich das per SQL abfgragen kann… der PGAdmin kanns ja auch :slight_smile:



test=*# create table c (i int);
CREATE TABLE
test=*# alter table c set (fillfactor=80);
ALTER TABLE
test=*# alter table c set (autovacuum_vacuum_scale_factor=2);
ALTER TABLE
test=*# select relname, reloptions from pg_class where relname='c';
 relname |                    reloptions
---------+--------------------------------------------------
 c       | {fillfactor=80,autovacuum_vacuum_scale_factor=2}
(1 row)

Andreas

Prima…

Dankeschön

Ah ja, da war es.

Hinweis: das funktioniert ab 8.4 so. Bis 8.3 wurden diese Einstellungen in pg_autovacuum abgelegt.

Ab 8.5 kann das vielleicht schon wieder was anderes sein - ist zwar unwahrscheinlich, aber nicht unmöglich. Systemtabellen dürfen sich ändern, verlass dich also nicht blind da drauf.

Hehe, da habe zuerst und vergeblich gesucht.

Ab 8.5 kann das vielleicht schon wieder was anderes sein - ist zwar unwahrscheinlich, aber nicht unmöglich. Systemtabellen dürfen sich ändern, verlass dich also nicht blind da drauf.

Exakt. Ist übrigens auch ein Grund dafür, daß z.B. ältere Versionen von PGAdmin nicht vollständig mit neueren Versionen von PG zurecht kommen. Gilt auch für psql.

Andreas