2010年5月 7日

[pgsql-jp: 40260] Re:複数DBのXID


sasaki <s.maoya@xxxxx> wrote:

> お手数ですが、XIDについて教えて頂けたら助かります。
> トランザクションの度に数値が増えていくというのは分かる
> のですが、複数のDBが存在し、普段全く使用していない
> DBの数値も上がって行っているように思えます。
> 一つのDBにトランザクションが発生した場合、他のDBの

> XIDの値も影響するのでしょうか?

「DBのXID」は、一般的に良く知られた用語ではないと思われます。
たぶん age(pg_database.datfrozenxid) のつもりではないかと推測しますが、
明確に定義したほうが誤解が避けられます。

挙動については、以下の基本的な動作から推測は可能ですか?
- 次に払い出される XID は、データベースクラスタ単位で管理されています。
複数のデータベース間で共有される値が使われることになります。
- pg_database.datfrozenxid は、そのデータベースで VACUUM が
行われた際にのみ値が更新されます。
- age() は、与えた XID と、現在の XID の差を計算します。

ちなみに、PostgreSQL ではトランザクションは複数のデータベースを
跨ることはできないので、一見、各データベースごとに独立した XID を
払い出しても良さそうに見えるかもしれませんが、実際にはデータベース間で
共有されるシステムカタログ (pg_database, pg_authid, pg_tablespace 等) に
対しては、各データベースからの XID が「混じる」ことがあります。
そのため、クラスタ単位で一意のXIDを使う必要があるのです。

------------------------------------------------------------
NTT オープンソース ソフトウェア センタ
板垣貴裕 <itagaki.takahiro@xxxxx>

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




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