pg_catalog.pg_statio_all_tables est votre ami. Tout ce que vous devez faire est d'interroger périodiquement pg_statio_all_tables pour les tables en question. Statistiques changeantes ~ table active, statistiques inchangées ~ table potentiellement inutilisée. select pg_stat_reset () ;
Faites juste attention à ce que personne ne le fasse au milieu de votre surveillance.
Par exemple:
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)
Inserts:
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)
Sélectionne:
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)
Supprime:
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)
mise à jour-- 2011-09-01
Des tests supplémentaires indiquent que cela vacuum
semble augmenter quelque peu les valeurs de pg_statio_all_tables, ce qui est regrettable pour l'utilisation souhaitée. Bien que vacuum
n'utilise pas pg_statio_all_tables inutile, cela rend l'interprétation des résultats un peu plus floue.
Un meilleur endroit pour surveiller est peut-être pg_catalog.pg_stat_all_tables (au moins avec les nouvelles versions de Pg). Je regarde la version 8.4 et qui compte les tuples insérés, lus, mis à jour et supprimés - ISTR 8.2 n'a pas tout cela et je ne connais pas 8.3 donc YMMV selon la version de Pg que vous êtes en utilisant.
Une troisième option (pour les activités d'insertion, de mise à jour et de suppression) consiste à surveiller les horodatages du fichier dans le répertoire $ PGDATA / base / $ datid. Le nom de fichier doit correspondre à l'oid de la table, vous pouvez donc l'utiliser pour identifier les tables qui ne reçoivent pas d'insertions, de mises à jour ou de suppressions. Malheureusement, cela ne concerne pas les tables qui sont toujours sélectionnées, et l'utilisation d'espaces de table entraînera des complications supplémentaires (car ces fichiers ne seront pas sous $ PGDATA / base / $ datid). Les horodatages ne seront pas mis à jour jusqu'à ce que les modifications en attente soient vidées, mais si le fichier n'a pas changé depuis des mois, les chances d'une modification en attente sont probablement faibles.
select
. Avez-vous pensé à vous connecter ?