Chaque table et index, en dehors des index hash, a une carte des espaces libres
(appelée aussi FSM, acronyme de Free Space
Map) pour conserver la trace des emplacements disponibles dans
la relation. Elle est stockée dans un fichier séparé du fichier des données. Le
nom de fichier est le numéro relfilenode suivi du suffixe
_fsm
. Par exemple, si le relfilenode d'une relation est
12345, la FSM est stockée dans un fichier appelé
12345_fsm
, dans même répertoire que celui utilisé pour le
fichier des données.
La carte des espaces libres est organisée comme un arbre de pages FSM. Les pages FSM de niveau bas stockent l'espace libre disponible dans chaque page de la relation. Les niveaux supérieurs agrégent l'information des niveaux bas.
À l'intérieur de chaque page FSM se trouve un arbre binaire stocké dans un tableau avec un octet par nœud. Chaque nœud final représente une page de la relation, ou une page FSM de niveau bas. Dans chaque nœud non final, la valeur la plus haute des valeurs enfants est stockée. Du coup, la valeur maximum de tous les nœuds se trouve à la racine.
Voir src/backend/storage/freespace/README
pour plus de
détails sur la façon dont la FSM est structurée, et comment
elle est mise à jour et recherchée. Le module pg_freespacemap
peut être utilisé pour examiner l'information stockée dans les cartes d'espace
libre.