本文へスキップ

Autovacuum Freezeとは?

おーとばきゅーむふりーず

Autovacuum Freezeとは、PostgreSQLトランザクションIDの周回問題を防ぐために自動的に実行する、古いデータのフリーズ処理のことです。

Autovacuum Freezeとは、PostgreSQLにおいて、トランザクションID(XID)の枯渇・周回(Wraparound)を防ぐために、Autovacuumデーモンが自動的に行うテーブルフリーズ処理です。

PostgreSQLは各行の可視性管理に32ビットトランザクションIDを使用しています。このIDは約21億個を使い切ると0に戻る(周回する)ため、古い行が「未来のトランザクション」と誤認識されてしまい、データが見えなくなる危険があります。これをXID周回問題と呼びます。

フリーズ処理は、十分に古いトランザクションIDを持つ行を「過去のすべてのトランザクションから見える」という特別な状態(FrozenXID)に変換することで、XIDの消費を停止します。主な動作の特徴は以下の通りです。

  • 通常のautovacuumより積極的なフリーズはaggressive vacuumとして実行される
  • autovacuum_freeze_max_ageパラメータで、フリーズを強制するXIDの年齢しきい値を制御できる
  • XID周回まで残り約1,000万トランザクションになるとPostgreSQLは警告を発し、さらに逼迫すると強制シャットダウンする

Autovacuum Freezeは通常は自動で行われますが、大規模なテーブルに対して実行されると負荷が高くなることがあります。pg_stat_user_tablesビューのn_dead_tupやrelfrozenxidを監視し、処理が追いついているかを確認する運用が推奨されます。

使い方・例文

長期間VACUUMが実行されていない大規模テーブルに対して、XID周回を防ぐためAutovacuumがフリーズ目的のVACUUMを強制実行することがあり、この処理中はI/Oが増大してパフォーマンスに影響することがあります。

この用語をシェア

𝕏 でポスト LINE

最終更新:

関連用語