59.4. 可见映射

每个堆关系有一个可见映射(VM),用于跟踪哪些页包含对所有活动事务均可见的元组。可见映射文件与关系的主数据文件放置在一起,有一个独立的分支文件与之对应,以关系的filenode值加上一个_vm后缀命名。例如, 如果一个关系的filenode是12345,VM存储在一个叫12345_vm的文件中,与主关系文件在同一目录。请注意索引没有VM。

可见映射简单地为每个堆页存储1个比特位。 如果该位被设置,则意味着该页上所有的元组对于所有事务都是可见的。 这意味着该页不包含任何需要清理的行。使用index-only扫描 时,可以在只使用索引元组的情况下使用这些信息对查询做出回复。

这个意义上的映射是保守的,我们确信无论何时只要位被设置,则条件为真,但如果该位没有被设置,则条件有可能是真,也可能不是真。 可见映射位只能通过清理(vacuum)来设置,但页面上的任何数据修改均可以将该位清空。