Expliquer l’objectif du vide et du nettoyage automatique

Effectué

Lorsqu’une ligne est mise à jour, chaque mise à jour est constituée d’une insertion et d’une suppression. Les données modifiées sont insérées et l’ancienne ligne est supprimée. Dans PostgreSQL, la ligne d’origine est conservée afin qu’une transaction puisse être rétablie en cas de problème. Au lieu de supprimer la ligne d’origine, elle est marquée pour suppression ultérieurement, ce qui entraîne des lignes « mortes » (ou tuples) qui sont toujours sur le disque, mais qui ne sont plus nécessaires.

Le processus de vidange supprime définitivement ces lignes, récupère de l’espace qui pourrait autrement être perdu, tout en mettant à jour les statistiques.

Le processus de nettoyage des lignes mortes est appelé processus de vacuum. Si ces lignes étaient laissées sur le disque, la base de données prenait davantage d’espace disque nécessaire, appelé « ballonnement » de base de données. Le processus VACUUM est important pour les raisons suivantes :

  • Pour récupérer l’espace disque occupé par les lignes marquées pour suppression.
  • Pour mettre à jour les statistiques de données à utiliser par le planificateur de requêtes.
  • Pour mettre à jour la carte de visibilité, ce qui accélère les analyses d’index uniquement.
  • Pour vous protéger contre la perte d’anciennes données en raison de l’ID de transaction wraparound.

PostgreSQL utilise un processus appelé vide pour supprimer définitivement les lignes et récupérer l’espace. En plus de récupérer de l’espace, il garantit également que les index sont efficaces.

Lorsque le processus de vide est déclenché automatiquement, le processus est appelé autovacuum . La fréquence à laquelle le processus doit s’exécuter dépend de la quantité d’opérations de mise à jour et de suppression. Vous pouvez également surveiller le nombre de lignes marquées pour suppression.

L’exécution périodique du processus de vide garantit que vous ne procédez pas comme suit :

  • Découvrez « ballonner », y compris des bases de données et des tables plus volumineuses que nécessaire.
  • Avoir des index volumineux et non optimaux.
  • Accroissement de l'expérience d'entrée/sortie (E/S).

Pour surveiller le nombre de lignes « mortes » dans une table, vous pouvez exécuter une requête SELECT :

SELECT relname, n_dead_tup, n_live_tup
FROM pg_catalog.pg_stat_all_tables
ORDER BY n_dead_tup DESC;

Pour exécuter manuellement le processus de vide, tapez :

vacuum