# F.34.pg_可见度

F.34.1.功能F.34.2.著者

这个pg_能见度模块提供了一种检查表的可见性映射(VM)和页面级可见性信息的方法。它还提供了检查可见性地图完整性和强制重建可见性地图的功能。

三个不同的位用于存储有关页面级别可见性的信息。可见性映射中的所有可见位表示关系对应页面中的每个元组对当前和未来的每个事务都可见。可见性映射中的所有冻结位表示页面中的每个元组都已冻结;也就是说,在插入、更新、删除或锁定元组之前,未来无需修改页面。页眉是PD_所有可见位与可见性映射中所有可见位的含义相同,但存储在数据页本身中,而不是存储在单独的数据结构中。这两个位通常是一致的,但在崩溃恢复后,当可见性映射位清除时,有时可以设置页面的“全部可见”位。报告的值也可能不一致,因为在pg_能见度检查可见性地图,然后再检查数据页。任何导致数据损坏的事件也可能导致这些位不一致。

显示有关PD_所有可见BIT比那些只参考可见性图的BIT要昂贵得多,因为它们必须读取关系的数据块,而不仅仅是(小得多的)可见性图。检查关系数据块的函数同样昂贵。

# F.34.1.功能

pg_visibility_map(关系regclass、blkno bigint、all_visible OUT boolean、all_Frozed OUT boolean)返回记录

返回给定关系的给定块的可见性映射中的所有可见位和所有冻结位。

pg_可见性(relation regclass、blkno bigint、all_visible OUT boolean、all_freezed OUT boolean、pd_all_visible OUT boolean)返回记录

返回给定关系的给定块的可见性映射中的所有可见位和所有冻结位,以及PD_所有可见有点像那个街区。

pg_visibility_map(关系regclass、blkno OUT bigint、all_visible OUT boolean、all_Frozed OUT boolean)返回一组记录

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

pg_可见性(关系regclass、blkno OUT bigint、all_visible OUT boolean、all_Frozed OUT boolean、pd_all_visible OUT boolean)返回一组记录

返回给定关系的每个块的可见性映射中的所有可见位和所有冻结位,以及PD_所有可见每个街区的一位。

pg_visibility_map_summary(关系regclass,all_visible OUT bigint,all_Frozed OUT bigint)返回记录

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

pg_check_freezed(relation regclass,t_ctid OUT tid)返回一组tid

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

pg_check_visible(relation regclass,t_ctid OUT tid)返回一组tid

返回存储在可见性映射中标记为all visible的页面中的非所有可见元组的TID。如果此函数返回一组非空的TID,则可见性贴图已损坏。

pg_truncate_visibility_map(relation regclass)返回void

截断给定关系的可见性贴图。如果您认为关系的可见性映射已损坏,并希望强制重建,则此函数非常有用。第一个真空在给定关系上执行此函数后,将扫描关系中的每一页并重建可见性映射。(在此之前,查询将视可见性贴图为包含所有零。)

默认情况下,这些函数只能由超级用户和pg_统计_扫描_表格角色,但pg_截断_可见性_映射(关系类)只能由超级用户执行。

# F.34.2.作者

罗伯特·哈斯<[rhaas@postgresql.org](邮寄至:rhaas@postgresql.org)>