Documentation PostgreSQL 14.22 » Internes » Stockage physique de la base de données » Carte de visibilité

Précédent | Niveau supérieur | Suivant
70.3. Carte des espaces libres | Sommaire | 70.5. Fichier d'initialisation

## 70.4. Carte de visibilité

Chaque relation a une carte de visibilité (VM acronyme de Visibility Map) pour garder trace des pages contenant seulement des lignes connues pour être visibles par toutes les transactions actives ; elle conserve aussi la liste des blocs contenant uniquement des lignes gelées. Elle est stockée en dehors du fichier de données dans un fichier séparé nommé suivant le numéro relfilenode de la relation, auquel est ajouté le suffixe `_vm`. Par exemple, si le relfilenode de la relation est 12345, la VM est stockée dans un fichier appelé `12345_vm`, dans le même répertoire que celui du fichier de données. Notez que les index n'ont pas de VM.

La carte de visibilité enregistre deux bits pour chaque bloc de la table. Le premier bit, s'il vaut 1, indique si le bloc associé ne contient que des enregistrements visibles ou, pour le dire autrement, si le bloc ne contient aucune ligne devait être nettoyée par un VACUUM. Cette information peut aussi être utilisée par les parcours d'index seul pour répondre à des requêtes n'utilisant que les informations stockées dans les entrées de l'index. Le deuxième bit, s'il vaut 1, signifie que toutes les lignes du bloc associé ont été gelées. Cela signifie que même un vacuum anti-wraparound n'a pas besoin de traiter ce bloc.

Chaque fois qu'un bit est à 1, la condition est vraie à coup sûr. Par contre, dans le cas contraire, la condition peut être vraie comme fausse. Les bits de la carte de visibilité ne sont initialisés que par le VACUUM, mais sont désinitialisés par toutes opérations de modification des données sur une page.

Le module pg_visibility peut être utilisé pour examiner les informations enregistrées dans la carte de visibilité.