[pgsql-jp: 38967] Re: Page 構造について

tanaka_tk1984 @ yahoo.co.jp tanaka_tk1984 @ yahoo.co.jp
2007年 11月 22日 (木) 12:32:11 JST


石井様
こんにちは田中です。

ご説明ありがとうございます。

実は石井様の記事(WEB+DB Vol.31)を勉強していました。
その際、図4では「アイテムポインタ」、文章だと「アイテムデータ」
と記載されていました。
「アイテムポインタ(ItemPointer)」でgrepをかけると「ItemPointerData」
であったため、ページの前から「ItemPointerData」が入るものと思いこんだことも、
勘違いの要因だったかもしれません。。。。


筆者の方から直接返信いただけて光栄です。
おかげで疑問点が解決できました。


(storage\itemptr.h)
typedef ItemPointerData *ItemPointer;


「WEB+DB Vol.31」(抜粋)========

「▼図4 ページの構造 P218」
|ページヘッダ|アイテムポインタ|アイテムポインタ|

「文章 P219」
ページの中央の空き領域を,前からはアイテムデータ,後ろからはタプルが攻めていくような]
イメージでページの空き領域が埋まっていくわけです。



以上です。



--- Tatsuo Ishii <ishii @ sraoss.co.jp> wrote:

> 石井です.
> 
> > こんにちは
> > 田中と申します。
> > 
> > 
> > 表題の件でご質問させて下さい。
> > 
> > 
> > 【質問内容】
> > 
> > 「正しい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
> 


--------------------------------------
New Design Yahoo! JAPAN  2008/01/01
http://pr.mail.yahoo.co.jp/newdesign/



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