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