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