Expliquer l’objectif du nettoyage et du nettoyage automatique

Effectué

Quand 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 originale est conservée afin qu’une transaction puisse être restaurée en cas de problème. Au lieu de supprimer la ligne d’origine, elle est marquée pour suppression ultérieure, ce qui entraîne des lignes « mortes » (ou tuples) qui restent sur le disque, alors qu’elles ne sont plus nécessaires.

Le processus de nettoyage qui porte bien son nom permet de supprimer définitivement ces lignes, ce qui permet de récupérer l’espace qui serait sinon perdu et de mettre à jour les statistiques.

Le processus de suppression des lignes mortes est appelé processus de nettoyage. Si ces lignes étaient laissées sur le disque, la base de données occuperait plus d’espace disque que nécessaire, un phénomène connu sous le nom de « 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 des données que le planificateur de requête va utiliser.
  • Pour mettre à jour la carte de visibilité, ce qui accélère les analyses d’index uniquement.
  • Pour vous protéger contre la perte de données anciennes en raison du bouclage des ID de transaction.

PostgreSQL utilise un processus appelé nettoyage pour supprimer définitivement les lignes et récupérer l’espace. En plus de récupérer l’espace, ce processus garantit l’efficacité des index.

Quand le processus de nettoyage est déclenché automatiquement, il est appelé nettoyage automatique. La fréquence à laquelle le processus doit s’exécuter va dépendre du nombre d’opérations de mise à jour et de suppression. Vous pouvez également superviser le nombre de lignes marquées pour suppression.

L’exécution régulière du processus de nettoyage vous garantit ceci :

  • Vous expérimentez un « ballonnement », y compris des bases de données et des tables plus volumineuses que nécessaire.
  • Vous n’avez pas d’index volumineux, sous-optimisés.
  • Vous n’augmentez pas les E/S.

Pour superviser 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 nettoyage, tapez :

vacuum