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

Vacuum at the Page Level

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

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

VACUUMは3つのパスで処理を行い、その分割こそが、削除されたタプルのストレージがある瞬間に消え、ラインポインタが別の瞬間に消える理由のすべてです。

この日のほかの記事

2026-07-09