[pgsql-jp: 38966] Re: Page 構造について
Tatsuo Ishii
ishii @ sraoss.co.jp
2007年 11月 22日 (木) 09:17:30 JST
石井です.
> こんにちは
> 田中と申します。
>
>
> 表題の件でご質問させて下さい。
>
>
> 【質問内容】
>
> 「正しいPage構造」と「ItemIdDataとItemPointerDataの違い」を
> 教えてください。
>
>
> 以下に調べた内容を記載します。
>
>
> 【調べた内容】
> (A)
> まずマニュアルより、ページの構造は以下のようになっていると記載されています。
> http://www.postgresql.jp/document/current/html/storage-page-layout.html
> ===
> PageHeaderData
> ItemPointerData
> 空き領域
> アイテム
> 特別な空間
> ===
>
>
> (B)
> また、ソースを確認すると以下のような構造だと記載されています。
> (postgresql-8.2.5/src/include/storage/bufpage.h)
>
> * +----------------+---------------------------------+
> * | PageHeaderData | linp1 linp2 linp3 ...
> * +-----------+----+---------------------------------+
> * | ... linpN |
> * +-----------+--------------------------------------+
> * | ^ pd_lower
> * |
> * | v pd_upper
> * +-------------+------------------------------------+
> * | | tupleN ... |
> * +-------------+------------------+-----------------+
> * | ... tuple3 tuple2 tuple1 | "special space" |
> * +--------------------------------+-----------------+
> * ^ pd_special
>
>
> 上記構造と(A)の内容より、linp1・・・がItemPointerDataかと
> 思ってしまいました
>
> 実際、ItemPointerData構造体も存在していました。
> (postgresql-8.2.5/src/include/storage/itemptr.h)
> (C)
> しかし、PageHeaderData構造体を確認したところ、ItemIdDataがline pointerと
> いうようなコメントが入っていました。
>
> (postgresql-8.2.5/src/include/storage/bufpage.h)
>
> typedef struct PageHeaderData
> {
> :省略
>
> ItemIdData pd_linp[1]; /* beginning of line pointer array */
> } PageHeaderData;
>
>
> (D)
> 以上の結果より、
> 「ItemPointerData」、「linp1」、「ItemIdData」の関係が
> 良くわからなくなってしまいました。
>
> ※間違っているかもしれませんが、現状はItemIdDataかItemPointerDataの
> 両者ともページ内のタプルの位置を表すものだと思っています。
単なるドキュメントの間違いではないでしょうか?正しくは,itemIdDataでしょ
う.ItemPointerDataは,ヒープ内のタプルのアドレスを表すためのもので,
Tuple IDと同じものです.サイズも6バイトあります.それに対して,
ItemIdDataは*ページ内の位置を表すもので,4 バイトだし,意味も全然違い
ます.
--
Tatsuo Ishii
SRA OSS, Inc. Japan
pgsql-jp メーリングリストの案内