54.3. 自由空间映射

每个堆和索引关系,除了哈希索引,有个自由空间映射FSM) 来保持跟踪关系中可用的空间。将同时在独立的关系叉文件存储主关系数据, 以关系的filenode 编号命名,加上一个_fsm后缀。例如,如果一个关系的filenode 是12345,存储 FSM 在一个叫 12345_fsm的文件里, 在与主关系文件在相同目录里。

自由空间映射组织为一个FSM页树。FSM页底层存储每个堆(或索引)页上可用的自由空间, 使用一个字节来代表每一个如页。高级别的从低级别聚合信息。

每个FSM页是一个二叉树,存储在一个数组,每个节点一个字节。每个叶节点代表一个堆页,或低级别的FSM页。 在每个非叶节点,存储其子节点值的高级别的值。因此在根节点存储叶节点的最大值。

参阅src/backend/storage/freespace/README关于更详细的FSM是怎样的结构,怎样更新和搜索它。 contrib/pg_freespacemap可以用来审查存储在自由空间映射的信息(参阅Section F.26)。