可視性マップ
データページごとに2ビット。ページ内の全行が全員に見えるか、全行が凍結済みか、を示す。小さな構造だが、二つの大きな最適化がこれだけに支えられている。
一つ目はインデックスオンリースキャンだ。インデックスには値はあっても可視性の情報がないため、行が自分のトランザクションから見えるかを知るには、本来はテーブルを読む必要がある。それでは読み込みを避ける意味がなくなる。ページにall-visibleの印があれば、Postgresはその読み込みを省ける。二つ目はvacuumだ。印のついたページは調べなくてよいので、巨大でもほとんど更新のないテーブルの掃除が数秒で終わることがある。さらにfrozenビットのおかげで、積極的な凍結処理もそのページを飛ばせる。大きなテーブルでラップアラウンド問題を扱える範囲に保てるのはこのためだ。