Ich bin verantwortlich für eine große PostgreSQL-Datenbank mit einigen Dutzend Tabellen. Ich vermute, dass auf viele dieser Tabellen nie zugegriffen wird.
Wie kann am besten überprüft werden, wann das letzte Mal auf eine bestimmte Tabelle zugegriffen wurde? Ich dachte daran, einen Auslöser hinzuzufügen DELETE
, INSERT
und UPDATE
, aber ich hoffe, es gibt einen effizienteren Weg.
postgresql
Adam Matan
quelle
quelle
select
. Haben Sie überlegt, sich anzumelden ?Antworten:
pg_catalog.pg_statio_all_tables ist dein Freund. Sie müssen lediglich regelmäßig pg_statio_all_tables nach den betreffenden Tabellen abfragen. Ändern von Statistiken ~ aktive Tabelle, nicht ändernde Statistiken ~ möglicherweise nicht verwendete Tabelle. Seien Sie nur vorsichtig, dass niemand
select pg_stat_reset () ;
mitten in Ihrer Überwachung eine macht.Beispielsweise:
Beilagen:
Wählt aus:
Löscht:
update-- 2011-09-01
Weitere Tests zeigen, dass
vacuum
die Werte in pg_statio_all_tables etwas zu steigen scheinen, was für Ihre gewünschte Verwendung unglücklich ist. Dievacuum
Verwendung von pg_statio_all_tables ist zwar nicht nutzlos, macht die Interpretation der Ergebnisse jedoch etwas unübersichtlicher.Möglicherweise ist pg_catalog.pg_stat_all_tables ein besserer Ort zum Überwachen (zumindest bei neueren Versionen von Pg). Ich schaue auf Version 8.4 und das zählt für eingefügte, gelesene, aktualisierte und gelöschte Tupel - ISTR 8.2 hat nicht alles und ich weiß nichts über 8.3, also YMMV, abhängig von der Version von Pg, die Sie sind mit.
Eine dritte Option (zum Einfügen, Aktualisieren und Löschen von Aktivitäten) besteht darin, die Zeitstempel der Datei im Verzeichnis $ PGDATA / base / $ datid zu überwachen. Der Dateiname sollte der OID der Tabelle zugeordnet sein, damit Sie damit Tabellen identifizieren können, die keine Einfügungen, Aktualisierungen oder Löschungen erhalten. Leider werden hiermit keine Tabellen angesprochen, aus denen noch ausgewählt wird, und die Verwendung von Tablespaces führt zu zusätzlichen Komplikationen (da diese Dateien nicht unter $ PGDATA / base / $ datid liegen). Die Zeitstempel werden erst aktualisiert, wenn ausstehende Änderungen gelöscht wurden. Wenn sich die Datei jedoch seit Monaten nicht geändert hat, ist die Wahrscheinlichkeit einer derzeit ausstehenden Änderung wahrscheinlich gering.
quelle
Sie können einige Informationen über die letzte Änderung an einer Tabelle erhalten
xmin
, z.Sie müssen sich jedoch des Modulo und der umlaufenden und gefrorenen Xids bewusst sein . Es gibt keine Möglichkeit, dies in eine "Zeit" umzuwandeln. Wenn Sie jedoch den Wert für Ihre Tabellen jetzt erfassen und zu einem späteren Zeitpunkt vergleichen, erhalten Sie eine Liste der geänderten Tabellen
quelle