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