66.4. Mapa de visibilidad (Visibility Map) #

Cada relación de montón (heap) tiene un Mapa de visibilidad (VM) para realizar el seguimiento de qué páginas contienen únicamente tuplas que se sabe que son visibles para todas las transacciones activas; también realiza el seguimiento de qué páginas contienen únicamente tuplas congeladas. Se almacena junto con los datos de la relación principal en una bifurcación de relación independiente, nombrada según el número de filenode de la relación, más un sufijo _vm. Por ejemplo, si el filenode de una relación es 12345, el VM se almacena en un archivo llamado 12345_vm, en el mismo directorio que el archivo de la relación principal. Ten en cuenta que los índices no tienen VM.

El mapa de visibilidad almacena dos bits por página de montón. El primer bit, si está establecido, indica que la página es totalmente visible (all-visible), o en otras palabras, que la página no contiene ninguna tupla que deba ser limpiada (vacuumed). Esta información también puede ser utilizada por los escaneos de solo índice para responder a consultas utilizando únicamente la tupla del índice. El segundo bit, si está establecido, significa que todas las tuplas de la página han sido congeladas. Esto significa que incluso un proceso de vacuum de tipo anti-wraparound no necesita volver a visitar la página.

El mapa es conservador en el sentido de que nos aseguramos de que cada vez que un bit está establecido, sabemos que la condición es verdadera, pero si un bit no está establecido, podría ser o no verdadera. Los bits del mapa de visibilidad solo son establecidos por el vacuum, pero son limpiados por cualquier operación que modifique los datos en una página.

El módulo pg_visibility se puede utilizar para examinar la información almacenada en el mapa de visibilidad.