支持的版本:当前 (17) / 16 / 15 / 14 / 13
开发版本:devel
不支持的版本:12 / 11 / 10 / 9.6

F.34. pg_visibility — 可见性映射信息和实用工具 #

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) 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

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

pg_check_frozen(relation regclass, t_ctid OUT tid) returns setof tid

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

pg_check_visible(relation regclass, t_ctid OUT tid) returns setof tid

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

pg_truncate_visibility_map(relation regclass) returns void

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

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

F.34.2. 作者 #

Robert Haas

提交更正

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