pg_visibility
模組提供了一種檢查表的可視性對映 (VM) 和頁面級別可見性資訊的方法。它還提供了用於檢查可見性對映的完整性以及強制重建它的函式。
有三個不同的位用於儲存關於頁面級別可見性的資訊。可見性對映中的 all-visible 位表示關係對應頁面中的每個元組對所有當前和未來的事務都可見。可見性對映中的 all-frozen 位表示頁面中的每個元組都已凍結;也就是說,在向該頁面插入、更新、刪除或鎖定元組之前,不需要進行未來的 vacuum 操作來修改該頁面。頁面頭中的 PD_ALL_VISIBLE
位與可見性對映中的 all-visible 位具有相同的含義,但它儲存在資料頁面本身而不是單獨的資料結構中。這兩個位通常是同步的,但在一處崩潰恢復後,頁面的 all-visible 位可能被設定而可見性對映位卻被清除。由於 pg_visibility
檢查可見性對映和檢查資料頁面之間發生的變化,報告的值也可能不一致。任何導致資料損壞的事件也可能導致這些位不一致。
顯示 PD_ALL_VISIBLE
位資訊的函式比僅查詢可見性對映的函式成本高得多,因為它們必須讀取關係的*資料塊*,而不是僅讀取(小得多的)可見性對映。檢查關係的*資料塊*的函式也同樣昂貴。
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
角色的使用者執行。
Robert Haas <rhaas@postgresql.org>
如果您在文件中看到任何不正確、不符合您對特定功能的體驗或需要進一步澄清的內容,請使用此表格報告文件問題。