Estoy a cargo de una gran base de datos PostgreSQL, con pocas docenas de tablas. Sospecho que nunca se accede a muchas de estas tablas.
¿Cuál es la mejor manera de verificar cuándo fue la última vez que se accedió a cierta tabla? Pensé en añadir un disparador en DELETE
, INSERT
y UPDATE
, pero espero que hay una manera más eficiente.
postgresql
Adam Matan
fuente
fuente
select
. ¿Has considerado iniciar sesión ?Respuestas:
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:
Insertos:
Selecciona:
Elimina:
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 bienvacuum
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.
fuente
Puede obtener información sobre el último cambio en una tabla con
xmin
, por ejemplo:Pero, debe tener en cuenta el módulo y los xids envolventes y congelados . No hay ninguna forma de convertir esto en un "tiempo", pero si captura el valor de sus tablas ahora, luego compara en una fecha posterior, puede obtener una lista de tablas que han cambiado
fuente