vacuum / analyze ausgeführt, immer noch lahm

Hallo liebes Forum,

ich habe eine PGDatenbank, die in einer Tabelle mal richtig viel Müll enthielt (Die Anzeige ging über 6000 Seiten).
Das ist eine Tabelle die ca. 10-15 mal pro Minute einen neuen Eintrag erhält.
Bisher hat die jemand für mich administriert, der nun aber leider nicht mehr da ist.

So, mittlerweile war der Zugriff auf diese Tabelle sau lahm geworden.
Also habe ich die Tabelle einfach mal geleert (kein Problem, da Daten die geschrieben werden immern nur für kurze Zeit benötigt werden) und ein vacuumdb database --verbose --analyze -t table gemacht (ausm kopf geschrieben, so ähnlich jedenfalls).

Wurde auch fein durchgeführt. Und obwohl die Tab dann fast leer war, das vacuum durchgeführt wurde, konnte ich die Tabelle nur mit sehr langer Wartezeit öffen.
Ich hab davon gelesen, das Postgres gelöscht Zeilen irgendwo dennoch vorhält, und man deswegen ja vacuumdb ausführen sollte.

Aber irgendwie ist die Tabelle immer noch sau-lahm. Andere Tabellen in der DB sind übrigens sehr flott, also an der Gesamtkonfig der Datenbank kannst an sich nicht liegen.

Irgendwie bin ich da jetzt ratlos, jemand noch ne Idee? Gibts da sowas wie ein Tabellen-Cache wie bei Mysql den man mal löschen sollte?

Gruss
Zippy

Nachtrag das sind übrigens die Verbose-Ausgaben, von Vaccuum Full

NOTICE: --Relation Tabellenname–
NOTICE: Index index1: Pages 17183; Tuples 6731: Deleted 2.
CPU 0.69s/0.05u sec elapsed 45.97 sec.
NOTICE: Index index2: Pages 20416; Tuples 6735: Deleted 2.
CPU 0.83s/0.03u sec elapsed 36.96 sec.
NOTICE: Index index3: Pages 18; Tuples 6735: Deleted 1.
CPU 0.00s/0.00u sec elapsed 0.00 sec.
NOTICE: Index index4: Pages 17; Tuples 6735: Deleted 1.
CPU 0.00s/0.00u sec elapsed 0.00 sec.
NOTICE: Index index5: Pages 58; Tuples 6735: Deleted 1.
CPU 0.00s/0.00u sec elapsed 0.00 sec.
NOTICE: Removed 2 tuples in 2 pages.
CPU 0.00s/0.00u sec elapsed 0.00 sec.
NOTICE: Pages 74015: Changed 26, Empty 0; Tup 6727: Vac 2, Keep 0, UnUsed 5004576.
Total CPU 3.80s/0.25u sec elapsed 110.09 sec.
NOTICE: --Relation pg_toast_255917–
NOTICE: Pages 0: Changed 0, Empty 0; Tup 0: Vac 0, Keep 0, UnUsed 0.
Total CPU 0.00s/0.00u sec elapsed 0.00 sec.
NOTICE: Analyzing tabellenname
VACUUM

Versuch doch mal das volle Programm:

vacuum full freeze analyze

Das dürfte eine Weile laufen, sollte aber alles aufräumen.
Vorsicht, das blockiert die Tabelle für die Zeit.

Hi Ads,

vielen Dank für den Tipp. Dann mach ich das mal in einen CronJob, und lass es nachts um 3 laufen oder so … vielleicht hilft das ja.

Danke dir!

Nein, führ das einmal manuell aus und schaue, ob es was bringt.

ansonsten, für die Cronjobs gibt es auto_vacuum.

ok, mach ich wenn ich gleich vom einkaufen zurück bin :wink: ich berichte dann …

Bring was mit, was spannendes, zum Spielen …

Mich würde mal interessieren, was du mit “lahm” meinst? Könnte es nicht auch an der Abfrage liegen, die die Tabelle benutzt?

Prinzipiell sollten natürlich regelmäßig “vacuums” gestartet werden (am besten per cron). In Fällen häufiger updates auf eine Tabelle empfiehlt sich sicherlich ein auto-vacuum zu aktivieren!

Der Unterschied zwischen Vacuum und Vacuum Full ist, dass Vacuum lediglich tote Tupel löscht. Ein Vacuum Full dagegen löscht nicht nur tote Tupel, sondern ordnet lebende Tupel auch physikalisch neu an - man könnte sagen: es defragmentiert die Tabelle und sortiert diese neu - daher der Lock und daher die erhöhte Zeit die es braucht.

Ein Freeze bringt in diesem Zusammenhang übrigens gar nichts.

Durch INSERTS fallen auch keine toten Tuppel an. Lediglich durch Updates oder Deletes - daher die Eingangsfrage zur “Trägheit der Tabelle”