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:
test_1=# create table test_stats (col1 integer);
CREATE TABLE
test_1=# select * from pg_catalog.pg_statio_all_tables
where schemaname not in ('pg_catalog', 'information_schema')
and relname = 'test_stats';
relid | schemaname | relname | heap_blks_read | heap_blks_hit | idx_blks_read | idx_blks_hit | toast_blks_read | toast_blks_hit | tidx_blks_read | tidx_blks_hit
-------+------------+------------+----------------+---------------+---------------+--------------+-----------------+----------------+----------------+---------------
22957 | public | test_stats | 0 | 0 | [null] | [null] | [null] | [null] | [null] | [null]
(1 row)
Wstawki:
test_1=# insert into test_stats (col1) select generate_series( 1, 10000000);
INSERT 0 10000000
test_1=# select * from pg_catalog.pg_statio_all_tables
where schemaname not in ('pg_catalog', 'information_schema')
and relname = 'test_stats';
relid | schemaname | relname | heap_blks_read | heap_blks_hit | idx_blks_read | idx_blks_hit | toast_blks_read | toast_blks_hit | tidx_blks_read | tidx_blks_hit
-------+------------+------------+----------------+---------------+---------------+--------------+-----------------+----------------+----------------+---------------
22957 | public | test_stats | 44260 | 10088481 | [null] | [null] | [null] | [null] | [null] | [null]
(1 row)
Wybiera:
test_1=# select count (*) from test_stats where col1 between 10000 and 50000;
count
-------
40001
(1 row)
test_1=# select * from pg_catalog.pg_statio_all_tables
where schemaname not in ('pg_catalog', 'information_schema')
and relname = 'test_stats';
relid | schemaname | relname | heap_blks_read | heap_blks_hit | idx_blks_read | idx_blks_hit | toast_blks_read | toast_blks_hit | tidx_blks_read | tidx_blks_hit
-------+------------+------------+----------------+---------------+---------------+--------------+-----------------+----------------+----------------+---------------
22957 | public | test_stats | 85560 | 10091429 | [null] | [null] | [null] | [null] | [null] | [null]
(1 row)
Usuwa:
test_1=# delete from test_stats where col1 between 10000 and 50000;
DELETE 40001
test_1=# select * from pg_catalog.pg_statio_all_tables
where schemaname not in ('pg_catalog', 'information_schema')
and relname = 'test_stats';
relid | schemaname | relname | heap_blks_read | heap_blks_hit | idx_blks_read | idx_blks_hit | toast_blks_read | toast_blks_hit | tidx_blks_read | tidx_blks_hit
-------+------------+------------+----------------+---------------+---------------+--------------+-----------------+----------------+----------------+---------------
22957 | public | test_stats | 155075 | 10136163 | [null] | [null] | [null] | [null] | [null] | [null]
(1 row)
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.
select
. Czy rozważałeś logowanie ?