# 68.4 可視性映射表（Visibility Map）

每個 heap 關連都有一個可見性映射表（VM，Visibility Map），用於追踪哪些頁面僅包含已知對所有活動事務可見的 tuple；它還追踪哪些頁面僅包含凍結的 tuple。 它與主要的關連資料一起儲存在一個單獨的關連分支中，以關連的 filenode 編號命名，加上 \_vm 後綴。例如，如果關連的 filenode 是 12345，則 VM 儲存在名稱為 12345\_vm 的檔案中，與主要關連檔案位於同一目錄中。請注意，索引沒有 VM。

可見性映射表將每個 heap 頁面儲存 2 個位元。第一個位元（如果為 1）表示頁面全部可見，或者換句話說，頁面不包含任何需要清理的 tuple。索引限定掃描也可以使用此訊息來索引限定掃描 tuple 來回答查詢。第二個位元（如果為 1）表示頁面上的所有 tuple 都已凍結。這意味著即使是防止交易重疊清理也不需要重新讀取頁面。

映射表是保守的，因為我們得確保無論何時設定一個位元，我們都知道條件為真，但如果沒有設定一個位元，它可能會也可能不會成立。可見性映射位元僅由 vacuum 設定，但可以透過頁面上的任何資料修改操作清除。

[pg\_visibility](https://docs.postgresql.tw/12/appendixes/additional-supplied-modules/pg_visibility) 模組可用於檢查可見性映射表中儲存的訊息。
