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