53.3. Carte des espaces libres
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 le 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 suppé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 contrib contrib/pg_freespacemap peut être utilisé pour
examiner l'information stockée dans les cartes d'espace libre
(voir Section F.24,
« pg_freespacemap »).