Répertoire pg_clog
¶
clog est l’abréviation de « Commit LOGging ». Autrement dit, des traces sur l’état des transactions (état dans le sens validée, annulée, etc.)
Chaque fichier de ce répertoire est un fichier binaire contenant l’état des identifiants de transactions. Chaque fichier fait 262144 octets. L’état de chaque identifiant de transaction tient sur deux bits. Donc, un million d’identifiants de transaction sont traçables dans un seul fichier.
autovacuum_freeze_max_age
indique le nombre maximum d’identifiants à conserver à un instant t, donc la taille maximale du répertoire est de 2 fois autovacuum_freeze_max_age
. autovacuum_freeze_max_age
valant au maximum deux milliards, le répertoire pourra contenir un maximum de 500 Mo. Ce qui fait un maximum de 2000 fichiers.
Il ne faut jamais modifier le contenu de ce répertoire. Toute modification pourrait faire perdre l’état des dernières transactions, ce qui nécessiterait la réinitialisation du cluster. Néanmoins quand des fichiers ont disparu (suite à une mauvaise manipulation, nettoyage d’un administrateur par exemple), PostgreSQL risque de les réclamer. La plupart du temps, il faut les recréer. Ils doivent faire 256 Ko. Suivant le contenu, les transactions seront considérées annulées ou validées. Ce contenu est donc 0x00 pour une annulation de transactions et 0x55 pour une validation. Quel que soit la méthode choisie, des données seront perdues.
S’il existe de vieux fichiers dans ce répertoire, c’est qu’il doit y avoir de vieilles transactions non terminées qui baissent l’efficacité du VACUUM
et empêchent la suppression des vieux fichiers clog. Pour vider le répertoire, il faut donc s’assurer que les VACUUM
se font correctement.