2025年9月25日: PostgreSQL 18 发布!
支持的版本: 当前 (18) / 17 / 16 / 15 / 14 / 13
开发版本: 开发
不支持的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4

66.4. 可见性映射 (Visibility Map) #

每个堆关系都有一个可见性映射 (VM),用于跟踪哪些页面只包含对所有活动事务都可见的元组;它还用于跟踪哪些页面只包含已冻结的元组。它与主关系数据一起存储在单独的关系 fork 中,文件名以关系的 filenode 号加上 _vm 后缀命名。例如,如果一个关系的 filenode 是 12345,VM 将存储在名为 12345_vm 的文件中,该文件与主关系文件位于同一目录中。请注意,索引没有 VM。

可见性映射为每个堆页面存储两个位。第一个位(如果设置)表示该页面是“全可见”的,换句话说,该页面不包含任何需要 vacuum 的元组。此信息也可供 索引扫描 使用,以便仅使用索引元组来回答查询。第二个位(如果设置)表示页面上的所有元组都已冻结。这意味着即使是反回卷 vacuum 也不需要重新访问该页面。

该映射是保守的,因为我们确保当一个位被设置时,我们知道该条件为真,但如果一个位未被设置,它可能为真也可能为假。可见性映射位仅由 vacuum 设置,但会被页面上的任何数据修改操作清除。

可以使用 pg_visibility 模块来检查存储在可见性映射中的信息。

提交更正

如果您在文档中发现任何不正确、与您对特定功能的实际体验不符或需要进一步澄清的内容,请使用 此表单 报告文档问题。