Jestem odpowiedzialny za dużą bazę danych PostgreSQL z kilkadziesiąt tabelami. Podejrzewam, że do wielu z tych tabel nigdy nie ma dostępu.
Jaki jest najlepszy sposób sprawdzenia, kiedy ostatnio uzyskiwano dostęp do określonego stołu? Myślałem o dodanie spust DELETE
, INSERT
a UPDATE
, ale mam nadzieję, że jest bardziej efektywny sposób.
postgresql
Adam Matan
źródło
źródło
select
. Czy rozważałeś logowanie ?Odpowiedzi:
pg_catalog.pg_statio_all_tables jest twoim przyjacielem. Wszystko, co musisz zrobić, to okresowo sprawdzać tabele pg_statio_all_tables. Zmiana statystyk ~ aktywna tabela, niezmienne statystyki ~ potencjalnie nieużywana tabela. Uważaj tylko, aby nikt nie
select pg_stat_reset () ;
monitorował.Na przykład:
Wstawki:
Wybiera:
Usuwa:
aktualizacja-- 2011-09-01
Dalsze testy wskazują, że
vacuum
wydaje się, że nieco zwiększa wartości w tabelach pg_statio_all_tables, co jest niefortunne dla zamierzonego zastosowania. Chociażvacuum
nie używa pg_statio_all_tables bezużyteczne, sprawia, że interpretacja wyników jest nieco bardziej niewyraźna.Być może lepszym miejscem do monitorowania jest pg_catalog.pg_stat_all_tables (przynajmniej z nowszymi wersjami Pg). Patrzę na wersję 8.4, która ma liczbę wstawionych, odczytanych, zaktualizowanych i usuniętych krotek - ISTR 8.2 nie ma tego wszystkiego i nie wiem o 8.3, więc YMMV zależy od wersji Pg, którą jesteś za pomocą.
Trzecią opcją (dla czynności wstawiania, aktualizacji i usuwania) jest oglądanie znaczników czasowych plików w katalogu $ PGDATA / base / $ datid. Nazwa pliku powinna być odwzorowana na OID tabeli, abyś mógł użyć jej do identyfikacji tabel, które nie otrzymują wstawek, aktualizacji lub usunięć. Niestety nie dotyczy to tabel, które wciąż są wybierane, a korzystanie z obszarów tabel spowoduje dodatkowe komplikacje (ponieważ pliki te nie będą w katalogu $ PGDATA / base / $ datid). Znaczniki czasu nie zostaną zaktualizowane, dopóki wszelkie oczekujące zmiany nie zostaną usunięte, ale jeśli plik nie zmienił się od miesięcy, szanse na oczekującą zmianę są prawdopodobnie niewielkie.
źródło
Możesz uzyskać informacje o ostatniej zmianie w tabeli
xmin
, np .:Ale musisz być świadomy modulo, wraparound i zamrożonych xidów . Nie ma żadnego sposobu na przekonwertowanie tego na „czas”, ale jeśli teraz uchwycisz wartość swoich tabel, a następnie porównasz później, możesz uzyskać listę tabel, które uległy zmianie
źródło