2010年3月28日

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

こんばんは、よろしくお願いします。

--- Takahiro Itagaki <itagaki.takahiro@xxxxx> wrote:

>
> "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 を除く。後述)

1. age() は、元々 日付関数ですが、なぜ、xid をage()関数を使用して表現す
るのでしょうか?

2. なぜ、マイナスが未来を表すのでしょうか?(マイナスが未来を表す事に決め
たのでしょうか?)
  http://www.postgresql.jp/document/8.1/html/functions-datetime.html#FUNCTIONS-DATETIME-TABLE
  を見たのですが、どこに説明が書かれているのか わかりませんでした。

3. トランザクションIDの周回は、過去と未来が逆転してしまうので、周回が発生
しないように
  定期的にvacuumを実行する必要がある という事でしょうか?


>
> > 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>
>
>
>


--------------------------------------
Get the new Internet Explorer 8 optimized for Yahoo! JAPAN
http://pr.mail.yahoo.co.jp/ie8/


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




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