[pgsql-jp: 26099] Re: コンカレントバキュームについて
Jun Kitamura
kitamura @ zoozee.jp
2002年 5月 23日 (木) 22:38:08 JST
北村@zoozee です。
杉田さん、色々とご教示ありがとうございます。助かります。
> ;;; 明示的に XID を FrozenXID(=2) にする(現在のトランザクションより前のトラン
> ;;; ザクションを XID=2 にする)ためには、 VACUUM FREEZE を行なえとありますが、
> ;;; 一日一回 VACUUM すれば問題無いような。
>
> 余裕を持って 5 億トランザクションごとがお勧めで、そうしていれば VACUUM
> FREEZE はしなくてもよいです。VACUUM をするのは、
>
> postgres=# select datname, datfrozenxid, age(datfrozenxid) from
> pg_database;
> datname | datfrozenxid | age
> -----------+--------------+------------
> postgres | 3221229343 | 1073741874
> template1 | 49 | 3872
> template0 | 49 | 3872
> (3 rows)
>
> postgres=#
>
> この age が 15 億になった辺りが、引数なしの VACUUM を行う目安です。15 億古いの
> ができたので、その中の 10 億より前のを FrozenXID に固めます。
age 15億が目安というのは、2^31 が約20億だから、5億余裕を見て・・というこ
とですね。なるほど。
PostgreSQL は、 2^31トランザクションまで実行可能(vacuum をかけない場合)と
いうことですね?
ちょっと微妙に勘違いしてるかもしれないのですが、22億(2^31より大きい)レコー
ドあるテーブルに、(begin,commit を使わずに)
update t1 set hizuke = now();
として更新をかけても、これは「1トランザクション」ですよね??
1レコードづつキーを指定しながら22億ループさせて update をかけた場合、
「22億トランザクション」ですよね?
22億ループを begin,commit で囲んでも、「22億(+1)トランザクション」ですよ
ね?(+1)は begin,commit分です。
間違ってたらご指摘お願いしたいのですが・・・(結構重要だったり)
pgsql-jp メーリングリストの案内