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が増大してパフォーマンスに影響することがあります。
この用語をシェア
最終更新: