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