凍結と XID の年齢の使い方

トランザクション ID の周回を防ぐ

書き方

SELECT datname, age(datfrozenxid) FROM pg_database;
SELECT relname, age(relfrozenxid) FROM pg_class WHERE relkind = 'r';
VACUUM FREEZE 表;

トランザクション ID(XID)は約 21 億で一周します。古い行は「凍結」して、どの XID よりも古いと印を付けておく必要があります。age(relfrozenxid) は、その表でまだ凍結していない一番古い XID からの年齢です。autovacuum_freeze_max_age(既定 2 億)を超えると、autovacuum を止めていても周回を防ぐ VACUUM が動きます。VACUUM FREEZE はすぐに凍結します。

例

VACUUM FREEZE old_ledger;
SELECT age(datfrozenxid) FROM pg_database WHERE datname = 'quest';

実際に打って練習する

PostgreSQL DBA コースの Lv30「凍結と周回 XID wraparound」で覚えます。ブラウザの中のシミュレーターで、本物と同じように打って確かめられます。

すべてのレベルが、プラチナ以上のプランで遊べます。

PostgreSQL の管理コマンド一覧(DBA)へ戻る