pg_catalog.pg_statio_all_tables - ваш друг. Все, що вам потрібно зробити, - це періодично опитувати pg_statio_all_tables для відповідних таблиць. Зміна статистики ~ активна таблиця, незмінна статистика ~ потенційно невикористана таблиця. Будьте обережні, щоб ніхто не робив select pg_stat_reset () ;посеред вашого моніторингу.
Наприклад:
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)
Вкладиші:
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)
Вибирає:
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)
Видаляє:
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)
оновлення-- 2011-09-01
Подальше тестування вказує на те, що, vacuumсхоже, дещо збільшуються значення в pg_statio_all_tables, що шкода для бажаного використання. Хоча vacuumвикористання pg_statio_all_tables не даремно, але інтерпретація результатів робить нечіткішими.
Можливо, краще місце для моніторингу - pg_catalog.pg_stat_all_tables (принаймні, з новішими версіями Pg). Я дивлюся на версію 8.4, і нараховується кількість вкладених, прочитаних, оновлених та видалених кортежів - ISTR 8.2 не має всього цього, і я не знаю про 8.3, тому YMMV залежно від версії Pg, яку ви перебуваєте використовуючи.
Третім варіантом (для вставки, оновлення та видалення) є перегляд часових міток файлів у каталозі $ PGDATA / base / $ datid. Ім'я файлу має відображатись в таблиці таблиці, щоб ви могли використовувати це для ідентифікації таблиць, які не отримують вставок, оновлень або видалень. На жаль, це не стосується таблиць, які все ще вибираються з, і використання табличних просторів спричинить додаткові ускладнення (оскільки ці файли не будуть під $ PGDATA / base / $ datid). Часові позначки не оновлюються, доки не будуть змінені очікувані зміни, але якщо файл не змінився протягом місяців, шанси на зміну, що очікує на даний момент, ймовірно, невеликі.
select. Чи розглядали ви лісозаготівлю ?