Je suis en charge d'une grande base de données PostgreSQL, avec quelques dizaines de tables. Je soupçonne que bon nombre de ces tables ne sont jamais accessibles.
Quelle est la meilleure façon de vérifier la dernière fois où une certaine table a été consultée? Je pensais que d'ajouter un déclencheur sur DELETE
, INSERT
et UPDATE
, mais je l' espère , il est un moyen plus efficace.
postgresql
Adam Matan
la source
la source
select
. Avez-vous pensé à vous connecter ?Réponses:
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:
Inserts:
Sélectionne:
Supprime:
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 quevacuum
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.
la source
Vous pouvez obtenir des informations sur la dernière modification d'une table avec
xmin
, par exemple:Mais, vous devez être conscient du modulo et des xids enveloppants et gelés . Il n'y a aucun moyen de convertir cela en un "temps", mais si vous capturez la valeur de vos tables maintenant, puis comparez à une date ultérieure, vous pouvez obtenir une liste des tables qui ont changé
la source