66.4. 能见度 Map

每个堆关系都有一个可见性 Map(Visibility Map,VM),以跟踪哪些页面仅包含已知对所有活动事务可见的 Tuples;它还跟踪哪些页面仅包含冻结的 Tuples。它与主要关系数据一起存储在单独的关系分支中,以关系的文件节点号加上_vm后缀命名。例如,如果某个关系的文件节点为 12345,则 VM 将存储在名为12345_vm的文件中,该文件与主关系文件位于同一目录中。请注意,索引没有虚拟机。

可见性图在每个堆页面中存储两位。如果设置了第一位,则指示该页面是全可见的,换句话说,该页面不包含任何需要清除的 Tuples。 index-only scans还可使用此信息来仅使用索引 Tuples 回答查询。如果设置了第二位,则表示页面上的所有 Tuples 都已冻结。这意味着即使是反环绕真空也不需要重新访问该页面。

从确保每次设置位都知道条件为真的意义上讲,Map 是保守的,但是如果未设置位,则该 Map 可能为真也可能不为真。可见性 Map 位仅由真空设置,但可通过页面上的任何数据修改操作清除。

pg_visibility模块可用于检查可见性 Map 中存储的信息。