présentation
PostgreSQL propose une fonctionnalité appelée VACUUM qui permet de nettoyer les pages de données en supprimant les tuples morts et en réorganisant l'espace disponible. Dans cet article, nous allons examiner comment VACUUM fonctionne au niveau de la page, en utilisant les outils pageinspect, pg_visibility et pg_freespacemap.
fonctionnement de vacuum
VACUUM fonctionne en trois passes. La première passe consiste à scanner chaque page de heap et à appliquer la fonction de pruning (page pruning) qui supprime les tuples morts et défragmente la page. Cette étape permet de récupérer l'espace occupé par les tuples morts et d'avancer le pointeur pd_upper.
CREATE EXTENSION IF NOT EXISTS pageinspect;
CREATE EXTENSION IF NOT EXISTS pg_visibility;
CREATE EXTENSION IF NOT EXISTS pg_freespacemap;
La deuxième passe consiste à collecter les TIDs des tuples morts dans un magasin de TIDs morts. Les TIDs sont utilisés pour identifier les tuples morts dans les indexes.
impact sur les indexes
Lorsque VACUUM supprime les tuples morts, les indexes qui pointent vers ces tuples doivent également être mis à jour. VACUUM scanne chaque index et supprime les entrées qui correspondent aux TIDs morts collectés lors de la deuxième passe.
SELECT lp, lp_flags, lp_off, lp_len, t_xmin, t_xmax, t_ctid
FROM heap_page_items(get_raw_page('vacuum_demo', 0))
LIMIT 10;
analyse des résultats
En analysant les résultats de VACUUM, nous pouvons voir comment les tuples morts sont supprimés et comment l'espace est récupéré. Les résultats montrent également comment les indexes sont mis à jour pour refléter les modifications apportées aux tuples.
En conclusion, VACUUM est un outil essentiel pour maintenir la santé et les performances d'une base de données PostgreSQL. En comprenant comment VACUUM fonctionne au niveau de la page, nous pouvons mieux apprécier l'importance de cette fonctionnalité et comment l'utiliser pour optimiser nos bases de données.