每个堆和索引关系,除了哈希索引外,都有一个空闲空间映射(FSM)来跟踪关系中的可用空间。
它存储在与主关系数据相邻的一个单独的关系分支中,命名为关系的文件节点号,再加上一个_fsm
后缀。
例如,如果一个关系的文件节点号是12345,FSM存储在一个名为12345_fsm
的文件中,
与主关系文件在同一个目录中。
空闲空间映射被组织成一棵FSM页面的树。底层FSM页面存储了在每一个堆(或索引)页面中可用的空闲空间,对于每一个这样的页面使用一个字节来表示。上层FSM页面则聚集来自于下层页面的信息。
在每一个FSM页面中是一个二叉树,存储在一个数组中,每一个节点一个字节。每个叶节点表示一个堆页面或者一个下层FSM页面。在每一个非叶节点中存储了它孩子节点中的最大值。因此叶节点中的最大值被存储在根中。
关于如何构建、更新和搜索FSM的更多信息请参考src/backend/storage/freespace/README
。pg_freespacemap模块可以用来检查存储在空闲空间映射中的信息。