阅读(266)
赞(23)
PostgreSQL 可见性映射
2021-08-24 15:07:39 更新
每一个堆关系都有一个可见性映射(VM)用来跟踪哪些页面 只包含已知对所有活动事务可见的元组,它也跟踪哪些页面只包含 未被冻结的元组。它伴随着主关系数据被存储在一个独立的关系分支中, 以该关系的文件节点号加上一个_vm
后缀来命名。例如, 如果一个关系的文件节点为12345,其VM被存储在名为12345_vm
的文件中, 该文件域主关系文件在同一个目录中。注意索引没有VM。
可见性映射仅为每个堆页面存储两个位。第一位如果被设置, 表示该页面上的元组都是可见的,或者换句话说该页面不含有 任何需要被清理的元组。这些信息也可以被index-only scans用来只依靠索引元组回答查询。第二位如果 被设置,表示该页面上的元组都已经被冻结。这也意味着防回卷 清理操作也不需要重新访问该页面。
该映射是保守的,我们可以确定不论何时一个位被设置,那就说明条件为真,但是如果一个位没有被设置,它可能为真也可能不为真。可见性映射的位只会被清理操作设置,但是可以被任何在页面上进行的数据修改操作清除。
pg_visibility模块可以被用来检查存储在可见性 映射中的信息。