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

tanaka tanaka_hideo @ yahoo.co.jp
2010年 4月 4日 (日) 11:06:30 JST


こんにちは、
返信ありがとうございます。

> 
> > 1. age() は、元々 日付関数ですが、なぜ、xid
> をage()関数を使用して表現す
> > るのでしょうか?
> 
> 引数が日付とXIDとで異なる関数としてオーバーロードされています。
> =# \df age
>                                                     関数一覧
>   スキーマ  | 名前 | 結果のデータ型 |                     
> 引数のデータ型                      |       型
>
------------+------+----------------+----------------------------------------------------------+----------------
>  pg_catalog | age  | interval       | timestamp with time zone       
>                          | normal(通常)
>  pg_catalog | age  | interval       | timestamp with time zone,
> timestamp with time zone       | normal(通常)
>  pg_catalog | age  | interval       | timestamp without time zone    
>                          | normal(通常)
>  pg_catalog | age  | interval       | timestamp without time zone,
> timestamp without time zone | normal(通常)
>  pg_catalog | age  | integer        | xid                            
>                          | normal(通常)
> (5 行)
> 

最新のpostgresバージョンと動作が違うかもしれませんが、

http://powergres.sra.co.jp/manual/Plus/Linux/V11/routine-vacuuming.html
の 8.2.3. トランザクション ID の送り込み失敗の防止 に
「データベースの pg_database 行の datfrozenxid フィールドは、データベース
全体に対するバキューム操作 (つまり、特定テーブルの指定のない VACUUM) が完
了した時に更新されます。このフィールドに保存された値は、VACUUM コマンドで
使用された、凍結用の切捨て XID です」
という記述があります。

1. VACCUMを実行すると、現在のXIDから、
  どれくらい前から、凍結されるのでしょうか?

2. そして、それは、どれくらい量 凍結されるのでしょうか?
  (例えば、現在のXIDが20億だったとして、10億前から、10億分 
   凍結されるのでしょうか?)

3. age(datfrozenxid) で表示される値は、
  現在のXIDが20億として、凍結されているXIDが13億より前からだとしら、
  7億(20-13)と表示されるという事でしょうか?

4. 現在のXIDは、xmax で知ることができるという理解でよいでしょうか?

5.XIDは、postgres内で唯一の番号が付くのでしょうか?
  postgresの中にテーブルやデータベースが複数存在する時に、
  最大のXIDを。すべての中で、最大のXIDを表示する方法はあるでしょうか?
  (それとも、XIDは、テーブル内、又は データベース内 で、それぞれ番号
が
  付くのでしょうか?)






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


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