2025年9月25日: PostgreSQL 18 釋出!
支援的版本:當前18)/ 17 / 16 / 15 / 14 / 13
開發版本:devel
不支援的版本:12 / 11 / 10 / 9.6

F.36. pg_visibility — 可見性對映資訊和工具 #

pg_visibility 模組提供了一種檢查表的可視性對映 (VM) 和頁面級別可見性資訊的方法。它還提供了用於檢查可見性對映的完整性以及強制重建它的函式。

有三個不同的位用於儲存關於頁面級別可見性的資訊。可見性對映中的 all-visible 位表示關係對應頁面中的每個元組對所有當前和未來的事務都可見。可見性對映中的 all-frozen 位表示頁面中的每個元組都已凍結;也就是說,在向該頁面插入、更新、刪除或鎖定元組之前,不需要進行未來的 vacuum 操作來修改該頁面。頁面頭中的 PD_ALL_VISIBLE 位與可見性對映中的 all-visible 位具有相同的含義,但它儲存在資料頁面本身而不是單獨的資料結構中。這兩個位通常是同步的,但在一處崩潰恢復後,頁面的 all-visible 位可能被設定而可見性對映位卻被清除。由於 pg_visibility 檢查可見性對映和檢查資料頁面之間發生的變化,報告的值也可能不一致。任何導致資料損壞的事件也可能導致這些位不一致。

顯示 PD_ALL_VISIBLE 位資訊的函式比僅查詢可見性對映的函式成本高得多,因為它們必須讀取關係的*資料塊*,而不是僅讀取(小得多的)可見性對映。檢查關係的*資料塊*的函式也同樣昂貴。

F.36.1. 函式 #

pg_visibility_map(relation regclass, blkno bigint, all_visible OUT boolean, all_frozen OUT boolean) returns record

返回給定關係給定塊在可見性對映中的 all-visible 和 all-frozen 位。

pg_visibility(relation regclass, blkno bigint, all_visible OUT boolean, all_frozen OUT boolean, pd_all_visible OUT boolean) returns record

返回給定關係給定塊在可見性對映中的 all-visible 和 all-frozen 位,以及該塊的 PD_ALL_VISIBLE 位。

pg_visibility_map(relation regclass, blkno OUT bigint, all_visible OUT boolean, all_frozen OUT boolean) returns setof record

返回給定關係每個塊在可見性對映中的 all-visible 和 all-frozen 位。

pg_visibility(relation regclass, blkno OUT bigint, all_visible OUT boolean, all_frozen OUT boolean, pd_all_visible OUT boolean) returns setof record

返回給定關係每個塊在可見性對映中的 all-visible 和 all-frozen 位,以及每個塊的 PD_ALL_VISIBLE 位。

pg_visibility_map_summary(relation regclass, all_visible OUT bigint, all_frozen OUT bigint) returns record

根據可見性對映返回關係中 all-visible 頁面和 all-frozen 頁面的數量。

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

返回儲存在可見性對映中標記為 all-frozen 的頁面中的非凍結元組的 TID。如果此函式返回非空 TID 集,則可見性對映已損壞。

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

返回儲存在可見性對映中標記為 all-visible 的頁面中的非 all-visible 元組的 TID。如果此函式返回非空 TID 集,則可見性對映已損壞。

pg_truncate_visibility_map(relation regclass) returns void

截斷給定關係的可見性對映。如果您認為該關係的可見性對映已損壞並希望強制重建它,此函式非常有用。執行此函式後,將在給定關係上執行的第一個 VACUUM 將掃描關係中的每個頁面並重建可見性對映。(在此之前,查詢會將可見性對映視為包含所有零。)

預設情況下,除 pg_truncate_visibility_map(relation regclass)(只能由超級使用者執行)之外,這些函式只能由超級使用者和具有 pg_stat_scan_tables 角色的使用者執行。

F.36.2. 作者 #

Robert Haas

提交更正

如果您在文件中看到任何不正確、不符合您對特定功能的體驗或需要進一步澄清的內容,請使用此表格報告文件問題。