[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 メーリングリストの案内