[pgsql-jp: 36434] Re: vacuumdb 時にWARNINGが発生

Katsuhiko Okano k_okano @ po.ntts.co.jp
2005年 11月 22日 (火) 11:42:26 JST


岡野と申します。

> DBサーバA
> $ vacuumdb --analyze dbname1
> WARNING:  some databases have not been vacuumed in 1897498207 transactions
> HINT:  Better vacuum them within 249985440 transactions, or you may have a
> wraparound failure.
> VACUUM
> 
> DBサーバB
> $ vacuumdb --analyze dbname2
> WARNING:  some databases have not been vacuumed in over 2 billion 
transactions
> DETAIL:  You may have already suffered transaction-wraparound data loss.
> 
> 更新済みのトランザクションは破棄されたという意味かと思いますが、
> これらのメッセージがでている状況ではvacuum自体は正常にできていないのでしょう
か?

ざっとソースを見た感じでは、vacuum自体は出来ていると思います。
しかしdbname2は過去に作ったデータの一部が取り出せないかもしれません。
理由は「PostgreSQL 7.4.6 文書」の
「第 21章定常的なデータベース保守作業」の
「21.1.3. トランザクション ID の周回エラーの防止」が参考になります。

アイデアとしては、
過去のバックアップなどから失われたトランザクションが何かを調べ、
現在の状態のバックアップをとっておいて
pg_resetxlogやpg_filedumpを使ってトランザクションIDを書き換え
段階的に取り出す。ということが(理論的には)可能かもしれません。


#postgresql-7.4.8の src\backend\commands\vacuum.c の
#684行目付近(vac_truncate_clog関数内)にあるメッセージが
#表示されたんだと思います。
#vacuum処理の最後でCLOGを切り詰めるときにトランザクションの周回を
#チェックして警告を出しているようですね。


現実的な方法ではなさそうですが、ご参考までに。

----------------------------------------
Katsuhiko Okano
k_okano at po.ntts.co.jp
NTT Sofrware Corp. (division "NBRO-PT4")



pgsql-jp メーリングリストの案内