pg_catalog.pg_statio_all_tables es tu amigo. Todo lo que debe hacer es sondear periódicamente pg_statio_all_tables para las tablas en cuestión. Estadísticas cambiantes ~ tabla activa, estadísticas no cambiantes ~ tabla potencialmente no utilizada. Solo tenga cuidado de que nadie haga una tarea select pg_stat_reset () ;
en medio de su monitoreo.
Por ejemplo:
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)
Insertos:
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)
Selecciona:
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)
Elimina:
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)
actualización-- 2011-09-01
Las pruebas adicionales indican que vacuum
parece aumentar un poco los valores en pg_statio_all_tables, lo cual es lamentable para el uso deseado. Si bien vacuum
no hace inútil el uso de pg_statio_all_tables, hace que la interpretación de los resultados sea un poco más confusa.
Quizás un mejor lugar para monitorear es pg_catalog.pg_stat_all_tables (al menos con versiones más nuevas de Pg). Estoy mirando la versión 8.4 y que tiene recuentos de tuplas insertadas, leídas, actualizadas y eliminadas: ISTR 8.2 no tiene todo eso y no sé acerca de 8.3, así que YMMV depende de la versión de Pg que sea utilizando.
Una tercera opción (para insertar, actualizar y eliminar actividad) es mirar las marcas de tiempo del archivo en el directorio $ PGDATA / base / $ datid. El nombre de archivo debe correlacionarse con el oid de la tabla, por lo que puede usarlo para identificar tablas que no reciben inserciones, actualizaciones o eliminaciones. Desafortunadamente, esto no aborda las tablas que todavía se seleccionan, y el uso de espacios de tablas causará complicaciones adicionales (ya que esos archivos no estarán por debajo de $ PGDATA / base / $ datid). Las marcas de tiempo no se actualizarán hasta que se eliminen los cambios pendientes, pero si el archivo no ha cambiado en meses, entonces las probabilidades de un cambio pendiente actualmente son probablemente pequeñas.
select
. ¿Has considerado iniciar sesión ?