すべてのプロダクト
Search
ドキュメントセンター

PolarDB:GC メカニズム

最終更新日:Mar 28, 2026

PolarDB for PostgreSQL (Compatible with Oracle) では、デッドタプルが占拠するストレージ領域を回収するために VACUUM を使用します。回収された領域はオペレーティングシステムには返却されず、同一テーブル内での新規挿入または更新による行の再利用に備えて保持されます。

Garbage collection mechanism

図において、tuple1 および tuple2 は有効な行であり、unused は無効な行(デッドタプル)を表します。GC 実行後、デッドタプルが占拠していた領域が解放され、再利用可能になります。

仕組み

PolarDB for PostgreSQL (Compatible with Oracle) は、マルチバージョン同時実行制御(MVCC)を実装するために複数の行バージョンを維持します。すべての UPDATE および DELETE 操作は、新しい行バージョンを作成し、以前のバージョンを無効としてマークします。これらの無効バージョン(デッドタプル)はデータブロック内に蓄積され、定期的に回収する必要があります。適切なタイミングでクリアされない場合、デッドタプルの増加によりテーブルの肥大化(bloat)が発生します。

デッドタプルの数が算出されたしきい値を超えると、GC が自動的にトリガーされます。

autovacuum しきい値 = autovacuum_vacuum_scale_factor × 総行数 + autovacuum_vacuum_threshold

たとえば、デフォルト設定(autovacuum_vacuum_scale_factor = 0.2autovacuum_vacuum_threshold = 50)の場合、100 行のテーブルでは、デッドタプル数が 70(0.2 × 100 + 50)を超えると autovacuum が実行されます。両パラメーターはいずれも設定可能です。

VACUUM はバックグラウンドで実行され、同時に行われる読み取りおよび書き込み操作をブロックしません。特定のテーブルに対して即時 GC を実行するには、以下のコマンドを実行します。

VACUUM <table_name>;