On this page
F.32. pg_visibility
pg_visibility
模块提供了一种检查表的可见性图(VM)和页面级可见性信息的方法。它还提供了检查可见性 Map 的完整性并强制对其进行重建的功能。
三个不同的位用于存储有关页面级可见性的信息。可见性图中的所有可见位指示该关系的相应页面中的每个 Tuples 对于每个当前和将来的事务都是可见的。可见性图中的全冻结位表示页面中的每个 Tuples 都被冻结;也就是说,在 Tuples 被插入,更新,删除或锁定到该页面之前,将来不再需要修改页面。页面标题的PD_ALL_VISIBLE
位与可见性图中的全可见位具有相同的含义,但存储在数据页面本身中,而不是存储在单独的数据结构中。这两个位通常会一致,但是有时可以在崩溃恢复后清除可见性 Map 位的同时设置页面的全可见位。报告的值也可能不一致,因为在pg_visibility
检查可见性图之后并且在检查数据页之前发生了更改。任何导致数据损坏的事件也可能导致这些位不一致。
显示有关PD_ALL_VISIBLE
位信息的功能比仅查询可见性图的功能要昂贵得多,因为它们必须读取关系的数据块,而不仅是(小得多)可见性图。检查关系数据块的功能同样昂贵。
F.32.1. Functions
pg_visibility_map(relation regclass, blkno bigint, all_visible OUT boolean, all_frozen OUT boolean) returns record
- 返回给定关系的给定块的可见性图中的所有可见和所有冻结位。
pg_visibility(relation regclass, blkno bigint, all_visible OUT boolean, all_frozen OUT boolean, pd_all_visible OUT boolean) returns record
- 返回给定关系的给定块的可见性图中的所有可见和所有冻结位,以及该块的
PD_ALL_VISIBLE
位。
- 返回给定关系的给定块的可见性图中的所有可见和所有冻结位,以及该块的
pg_visibility_map(relation regclass, blkno OUT bigint, all_visible OUT boolean, all_frozen OUT boolean) returns setof record
- 返回给定关系的每个块的可见性图中的所有可见和所有冻结位。
pg_visibility(relation regclass, blkno OUT bigint, all_visible OUT boolean, all_frozen OUT boolean, pd_all_visible OUT boolean) returns setof record
- 返回给定关系的每个块的可见性图中的所有可见和所有冻结的位,再加上每个块的
PD_ALL_VISIBLE
位。
- 返回给定关系的每个块的可见性图中的所有可见和所有冻结的位,再加上每个块的
pg_visibility_map_summary(relation regclass, all_visible OUT bigint, all_frozen OUT bigint) returns record
- 根据可见性 Map,返回关系中的所有可见页面数和所有冻结页面数。
pg_check_frozen(relation regclass, t_ctid OUT tid) returns setof tid
- 返回存储在可见性图中标记为全冻结的页面中的非冻结 Tuples 的 TID。如果此函数返回一组非空的 TID,则可见性图已损坏。
pg_check_visible(relation regclass, t_ctid OUT tid) returns setof tid
- 返回存储在可见性图中标记为“全部可见”的页面中的非全部可见 Tuples 的 TID。如果此函数返回一组非空的 TID,则可见性图已损坏。
pg_truncate_visibility_map(relation regclass) returns void
- 截断给定关系的可见性图。如果您认为该关系的可见性图已损坏并且希望强制重建它,则此功能很有用。执行此功能后,在给定关系上执行的第一个
VACUUM
将扫描关系中的每个页面并重建可见性图。 (在执行此操作之前,查询会将可见性图视为包含所有零.)
- 截断给定关系的可见性图。如果您认为该关系的可见性图已损坏并且希望强制重建它,则此功能很有用。执行此功能后,在给定关系上执行的第一个
默认情况下,这些功能仅可由超级用户和pg_stat_scan_tables
角色的成员执行,但只能由超级用户执行的pg_truncate_visibility_map(relation regclass)
除外。
F.32.2. Author
罗伯特·哈斯<rhaas@postgresql.org>