66.3. Mapa de espacio libre (Free Space Map) #

Cada relación de montón (heap) e índice, excepto para los índices hash, tiene un Mapa de espacio libre (FSM) para realizar el seguimiento del espacio disponible en la relación. 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 _fsm. Por ejemplo, si el filenode de una relación es 12345, el FSM se almacena en un archivo llamado 12345_fsm, en el mismo directorio que el archivo de la relación principal.

El Mapa de espacio libre se organiza como un árbol de páginas FSM. Las páginas FSM de nivel inferior almacenan el espacio libre disponible en cada página de montón (o índice), utilizando un byte para representar cada una de estas páginas. Los niveles superiores agregan información de los niveles inferiores.

Dentro de cada página FSM hay un árbol binario, almacenado en un array con un byte por nodo. Cada nodo hoja representa una página de montón, o una página FSM de nivel inferior. En cada nodo no hoja, se almacena el mayor de los valores de sus hijos. El valor máximo de los nodos hoja se almacena, por tanto, en la raíz.

Consulta src/backend/storage/freespace/README para obtener más detalles sobre cómo se estructura el FSM, y cómo se actualiza y busca. El módulo pg_freespacemap se puede utilizar para examinar la información almacenada en los mapas de espacio libre.