ストレージ節約
クエリ速度の維持
インデックス効率の改善
膨張(bloat)防止
古いデータのリーク防止(セキュリティ)
まず一言で言うと:
MVCCが「古いデータを残す仕組み」
GCは「もう不要になった古いデータを消す仕組み」
つまり
MVCCがゴミを生み、GCが掃除する。
MVCC(Multi-Version Concurrency Control)は
「更新時にデータを上書きせず、新しいバージョンを作ることでロック競合を減らす仕組み」
元データ:
Transaction A が UPDATE:
✔ 読み取りトランザクションは旧バージョンを参照
✔ 新規トランザクションは新バージョンを見る
これが Snapshot Isolation の正体。
MVCCは「古いデータを消さない」設計。
すると:
UPDATEするたびに古い行が残る
DELETEしても物理的には残る
Undoログも溜まる
インデックスも増える
👉 これが バージョン膨張(bloat)
GCの役割はこれ:
「どのトランザクションからも参照されなくなった古いバージョンを削除する」
データベースのガーベージコレクション = トランザクションや更新の結果できた “不要なデータの掃除” をするプロセス。
自動で動き、性能劣化やストレージ浪費を防ぐための大切な仕組み。