postgresql table bloat autovacuum not keeping up

cgallet 25/04/2026
RÉSOLU
cgallet
Auteur
Avatar de cgallet
cgallet
Auteur

Ma table d'events sur Postgres prend 400 Go alors qu'elle ne contient que 10 millions de lignes. Le vacuum tourne mais ne libère aucun espace disque à l'OS.

Comment je peux récupérer l'espace sans verrouiller toute la table pendant 5 heures avec un VACUUM FULL ?

25/04/2026 à 16:10

3 commentaires

kbriand
Membre
Avatar de kbriand
kbriand
Membre

Le VACUUM classique ne rend jamais l'espace au disque, il marque juste les pages comme réutilisables. Pour reconstruire la table en ligne sans lock, utilise pg_repack.

pg_repack -t events_table -d my_database
Modifié le 23/05/2026 à 16:20
cschneider
Membre Actif
Avatar de cschneider
cschneider
Membre Actif

Vérifie aussi si tu n'as pas une transaction idle très vieille qui traîne. Si c'est le cas, l'autovacuum ne peut rien nettoyer car il doit garder les anciennes versions des lignes pour cette transaction.

SELECT pid, query, state, xact_start FROM pg_stat_activity WHERE state != 'active';
28/04/2026 à 06:31
cgallet
Auteur
Avatar de cgallet
cgallet
Auteur

C'était bien ça, une session oubliée par un script de data science bloquait le nettoyage depuis 3 jours. J'ai tué le process et pg_repack a fait des miracles. J'ai récupéré 350 Go. Merci beaucoup !

Modifié le 23/05/2026 à 16:20

Laisser une réponse

Vous devez être connecté pour poster un message !

Rejoindre la communauté

Recevoir les derniers articles gratuitement en créant un compte !

S'inscrire