2010年2月16日

[pgsql-jp: 40172] Re:[SPAM] トランザクション ID の最大値


"tanaka" <tanaka_hideo@xxxxx> wrote:

> ここに書かれている
> トランザクションIDの最大値は、
> 2^32 - 1
> というのは、正しいですか?
> http://www.interdb.jp/techinfo/postgresql/p-2-06.html


XID は周回して再利用されるので、「最大値」というよりは
「ある時点で、同時に表現できる範囲」というニュアンスです。
定期的に VACUUM していれば、総トランザクション数が 2^32 を
超えても、問題なくデータベースを使い続けられます。

> トランザクションIDが、42億ぐらいになったときの表示が、マイナス表示になる
> のは正常な動作でしょうか?

XID そのものの表示はマイナスにはならないので、age() の結果の話でしょうか?
マイナスの age() は未来を表します。ただ、普通の使い方では未来 age を
目にすることはほとんどないので、いわゆる「トランザクションIDの周回エラー」が
発生している恐れがありますね。(ただし template0 を除く。後述)

> template0 , template1 も,ユーザが作成したデータベースの
> トランザクションIDと同じ値になっているのは
> なぜでしょうか?
> template0,template1は、普段、動作中でも使用されていると
> いう事ですか?

たぶん正常な動作です。
「トランザクションIDの周回エラーの防止」が参考になるのでは。
http://www.postgresql.jp/document/current/html/routine-vacuuming.html#VACUUM-FOR-WRAPAROUND

注意があるとすれば、「template0 の age(datfrozenxid) は無視してよい」
ということですが、なぜかこのドキュメントには明記されてませんね……。
「検査する簡便な方法」にある SQL は、datallowconn を条件に
加えるべきだと思うのですが、どう思いますか? > みなさま
SELECT datname, age(datfrozenxid) FROM pg_database WHERE datallowconn;

------------------------------------------------------------
NTT オープンソース ソフトウェア センタ
板垣貴裕 <itagaki.takahiro@xxxxx>

投稿者 xml-rpc : 2010年2月16日 14:20
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/93363
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。