PostgreSQLのVACUUMをページレベルで分解:バイト単位の内部動作
Vacuum at the Page Level

PostgreSQLのVACUUMがページレベルでどのように機能するかを、pageinspect、pg_visibility、pg_freespacemapを使ってバイト単位で追跡します。VACUUMの3フェーズ(ヒープスキャン、インデックスクリーンアップ、ヒープクリーンアップ)を、削除されたタプルのストレージがいつ解放され、ラインポインタがいつ再利用されるかを正確に示します。インデックスがある場合、デッドタプルのラインポインタがLP_DEADからLP_UNUSEDに変わるまでの2段階のプロセスを解説し、インデックスがない場合との違いも明らかにします。
VACUUMは3つのパスで処理を行い、その分割こそが、削除されたタプルのストレージがある瞬間に消え、ラインポインタが別の瞬間に消える理由のすべてです。