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?
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”