Redrock Postgres 搜索 英文
版本: 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16 / 17

F.34. pg_visibility — 可视性映射信息和实用程序 #

F.34.1. 函数
F.34.2. 作者

pg_visibility 模块提供了一种方法来检查表的可见性映射 (VM) 和页级可见性信息。它还提供函数来检查可见性映射的完整性并强制它进行重建。

使用三个不同的位来存储关于页面级别的可见性信息。可见性映射中的全可见位表示关系的对应页面中的每个元组对当前和未来的所有事务都是可见的。可见性映射中的冻结位表示页面中的每个元组都已冻结;也就是说,未来不会有清理需要对页面进行修改,直到在该页面中插入、更新、删除或锁定元组。页标题的PD_ALL_VISIBLE位具有与可见性映射中全可见位相同的意思,但存储在数据页面本身中,而不是单独的数据结构。这两个位通常是一致的,但在崩溃恢复后,页面全可见位可能设置,而可见性映射位被清除。报告的值还可能因为pg_visibility在检查可见性映射前并检查数据页面后发生更改而不同。造成数据损坏的任何事件也可能导致这些位不一致。

显示关于PD_ALL_VISIBLE位的信息的函数比仅查询可见性映射的函数开销大得多,因为前者必须读取关系数据块,而不仅仅是(小得多的)可见性映射。检查关系数据块的函数开销类似。

F.34.1. 函数 #

pg_visibility_map(relation regclass, blkno bigint, all_visible OUT boolean, all_frozen OUT boolean) 返回记录

返回给定关系的给定数据块的可见性映射中的全可见位和全冻结位。

pg_visibility(relation regclass, blkno bigint, all_visible OUT boolean, all_frozen OUT boolean, pd_all_visible OUT boolean) 返回记录

返回给定关系的给定数据块的可见性映射中的全可见位和全冻结位,加上数据块的PD_ALL_VISIBLE位。

pg_visibility_map(relation regclass, blkno OUT bigint, all_visible OUT boolean, all_frozen OUT boolean) 返回记录集

返回给定关系的每个数据块的可见性映射中的全可见位和全冻结位。

pg_visibility(relation regclass, blkno OUT bigint, all_visible OUT boolean, all_frozen OUT boolean, pd_all_visible OUT boolean) 返回记录集

返回给定关系的每个数据块的可见性映射中的全可见位和全冻结位,加上每个数据块的PD_ALL_VISIBLE位。

pg_visibility_map_summary(relation regclass, all_visible OUT bigint, all_frozen OUT bigint) 返回记录

返回根据可见性映射在关系中可见页面和冻结页面的数量。

pg_check_frozen(relation regclass, t_ctid OUT tid) 返回 tid 集合

返回存储在可见性映射中标记为全部冻结的页面中的非冻结元组的 TID。如果此函数返回一个非空 TID 集合,则可见性映射已损坏。

pg_check_visible(relation regclass, t_ctid OUT tid) 返回 tid 集合

返回存储在可见性映射中标记为全部可见的页面中的非全部可见元组的 TID。如果此函数返回一个非空 TID 集合,则可见性映射已损坏。

pg_truncate_visibility_map(relation regclass) 返回 void

截断给定关系的可见性映射。如果您认为关系的可见性映射已损坏并希望强制重建它,此函数很有用。在执行此函数后对给定关系执行的第一个 VACUUM 将扫描关系中的每个页面并重建可见性映射。(在完成之前,查询将把可见性映射视为全部包含零。)

默认情况下,除了只能由超级用户执行的 pg_truncate_visibility_map(relation regclass) 之外,这些函数只能由具有 pg_stat_scan_tables 角色的权限的超级用户和角色执行。

F.34.2. 作者 #

Robert Haas