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

Tatsuo Ishii ishii @ sraoss.co.jp
2007年 11月 23日 (金) 10:12:20 JST


石井です.

> 石井様
> こんにちは田中です。
> 
> ご説明ありがとうございます。
> 
> 実は石井様の記事(WEB+DB Vol.31)を勉強していました。

私の記事をお読み頂き,ありがとうございます.
# ちなみに,該当記事は Vol.24ではないかと思います.
http://www2b.biglobe.ne.jp/~caco/webdb-pdfs/vol24_214-221.pdf
# 他の記事一覧は http://www2b.biglobe.ne.jp/~caco/magazines.html にて.

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

すみません.間違いです.私もドキュメントの間違いに引き摺られていたのか
も.あと,p215に「ページの先頭には24バイトの管理領域があり...」とあり
ますが,これは20バイトの間違いです.すみません.私の理解が正しければ,
7.3から8.2まで全部20バイトです.8.3は24バイトです.

オリジナルのドキュメントの間違いに関しては,7.3から8.3まで修正をコミッ
トしておきました.
--
Tatsuo Ishii
SRA OSS, Inc. Japan

> 筆者の方から直接返信いただけて光栄です。
> おかげで疑問点が解決できました。
> 
> 
> (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 メーリングリストの案内