PostgreSQLには、アーキテクチャーの制限として、システム停止を伴うトランザクションの周回問題があり、それを避けるためにタプル凍結によるトランザクションIDの回収を必要とします。トランザクションの周回問題については、“PostgreSQL Documentation”の“Preventing Transaction ID Wraparound Failures”を参照してください。
タプル凍結は、自動バキュームやVACUUM FREEZE(積極的なタプル凍結)によって動作します。しかし、トランザクションを消費するスピードが速いシステムでは、自動バキュームだけでは周回問題に遭遇する可能性があります。なぜなら、自動バキュームは、アプリケーションとの衝突頻度やシステム負荷の上昇を抑えるために低速だからです。このようなシステムでは、適切なタイミングで積極的なタプル凍結を実行する必要があります。
Fujitsu Enterprise Postgresでは、効率の良い積極的なタプル凍結を行うスクリプトを提供しています。
本節では、運用中のシステムの凍結処理が間に合っているかを監視する方法とスクリプトの走行時間を見積もる方法を説明します。
ポイント
一度に大量データを挿入または更新すると次の凍結処理に時間がかかるため、そのような処理をした後に積極的なタプル凍結を実行してください。