AUTO VACUUM がバックグラウンドで自動清掃
古い行バージョンを物理的に削除
ページを再利用できるようにする
ANALYZE と組み合わせて統計情報更新も可能
放置すると「膨張 (bloat)」が起きて動作が重くなるので重要!
Undoログに古い行の情報を保持
Purge thread が不要になった Undo を掃除
ページの再利用やスペースの回収をする
PostgreSQL の VACUUM よりバックグラウンドで自動的に動く仕組み。
MVCCでは各行に
xmin(作成トランザクションID)
xmax(削除トランザクションID)
がある。
VACUUMは:
全トランザクションの最小IDを確認
それより古い不要バージョンを削除
👉 だから 長時間トランザクションがあるとVACUUMが進まない
これ、実務で超ある。
古いバージョンはUndoログに保存
Purge threadが不要Undoを削除
Undo tablespaceが肥大することもある
MVCC + GC の関係で注意すべきこと:
長時間トランザクションはNG
レプリカ遅延があるとGCが止まる場合がある
autovacuum設定は超重要
write-heavy環境ではbloat監視必須
Datadogで監視するなら:
dead tuples
vacuum lag
undo history length
| MVCC | GC |
|---|---|
| バージョンを作る | 不要バージョンを消す |
| ロックを減らす | ストレージを守る |
| 読み取り性能を上げる | 膨張を防ぐ |
MVCCだけでは完結しない。
GCがあって初めて健全なDBになる。