Wie kann ich wissen, ob die Statistiken einer Postgres-Tabelle auf dem neuesten Stand?

In pgAdmin, wenn eine Tabelle, Statistik sind out-of-date, fordert er:

Läuft VAKUUM empfohlen

Die geschätzte Zeilenanzahl für die Tabelle schema.Tabelle abweicht
deutlich von der tatsächlichen Zeilenanzahl. Führen Sie das VAKUUM ANALYSIEREN
auf diese Tabelle.

Getestet hab ich es mit pgAdmin 3 und PostgreSQL 8.4.4, mit autovacuum=off. Der prompt zeigt sich sofort, wenn ich Sie auf eine Tabelle, die geändert wurde.

Sagen wir mal ich mache ein web-basiertes system in Java, wie kann ich erkennen, ob eine Tabelle von out-of-date, so dass ich zeigen kann, eine Eingabeaufforderung wie in pgAdmin?

Wegen der Art meiner Bewerbung, hier ein paar Regeln, die ich Folgen müssen:

  1. Ich möchte wissen, ob die Statistiken einer bestimmten Tabelle in pg_stats und pg_statistic sind up to date.

  2. Kann ich nicht die autovacuum-flag in postgresql.conf. (In anderen Worten, die autovacuum-flag kann ein-oder ausgeschaltet werden. Ich habe keine Kontrolle über Sie. Ich muss sagen, wenn die stats-up-to-date, ob der autovacuum-flag ist on oder off.)

  3. Ich kann nicht laufen vacuum/analyze jeder Zeit, es zu machen up-to-date.

  4. Wählt ein Benutzer eine Tabelle, ich brauche die Aufforderung angezeigt, dass die Tabelle veraltet ist, wenn es updates auf dieser Tabelle (wie drop, insert und update), die nicht reflektiert in pg_stats und pg_statistic.

Scheint es, dass es nicht möglich durch die Analyse von Zeitstempeln in pg_catalog.pg_stat_all_tables. Natürlich, wenn eine Tabelle noch nicht analysiert wurden, bevor, ich kann überprüfen, ob es einen timestamp in last_analyze, um herauszufinden, ob die Tabelle up-to-date. Mit dieser Methode, jedoch kann ich nicht erkennen, wenn die Tabelle ist up-to-date, wenn es bereits ein timestamp. In anderen Worten, egal wie viele Zeilen ich hinzufügen, um die Tabelle, Ihre last_analyze timestamp in pg_stat_all_tables ist immer für die erste Analyse (vorausgesetzt, die autovacuum-flag ausgeschaltet ist). Daher kann ich nur die "Running VAKUUM empfohlen" prompt für die erste Zeit.

Es ist auch nicht möglich durch den Vergleich der last_analyze timestamp dem aktuellen Zeitstempel. Könnte es nicht sein, eine Aktualisierung der Tabelle für Tage. Und es gibt wohl noch Tonnen von updates in einer Stunde.

Angesichts dieses Szenarios, wie kann ich immer sagen, ob die Statistiken einer Tabelle sind up-to-date?

InformationsquelleAutor Beibei | 2011-08-01
Schreibe einen Kommentar