每个堆关系都有一个可见性映射(VM)来跟踪哪些页面仅包含已知对所有活动事务可见的元组;它还跟踪哪些页面仅包含冻结的元组。它与主关系数据一起存储在单独的关系分支中,以关系的文件节点号命名,加上_vm
后缀。例如,如果关系的文件节点为 12345,则 VM 存储在一个名为12345_vm
的文件中,与主关系文件位于同一目录中。请注意,索引没有 VM。
可见性映射为每个堆页面存储两位。如果设置了第一位,则表示该页面是全可见的,或者换句话说,该页面不包含任何需要 vacuum 的元组。此信息还可以被仅索引扫描用来仅使用索引元组来回答查询。如果设置了第二位,则表示该页面上的所有元组都已冻结。这意味着即使是反环绕 vacuum 也不需要重新访问该页面。
该映射是保守的,因为我们确保只要设置了一位,我们就知道该条件为真,但如果一位未设置,则该条件可能为真也可能为假。可见性映射位仅由 vacuum 设置,但会被页面上的任何数据修改操作清除。
pg_visibility模块可用于检查存储在可见性映射中的信息。
如果您在文档中看到任何不正确的内容,与您对特定功能的体验不符,或者需要进一步澄清,请使用此表单报告文档问题。