[pgsql-jp: 27147] Re: 見積り表領域と

sugita @ sra.co.jp sugita @ sra.co.jp
2002年 8月 25日 (日) 21:20:50 JST


  杉田です。

From: "sasaki" <GSP05271 @ nifty.com>
Date: Sun, 25 Aug 2002 18:03:28 +0900 (JST)

;;; > ;;; 表領域の計算式 :
;;; > 
;;; >   レコードのデータ部分は、6 + 64 + 8 = 78 でなく、次のようになります。
;;; > 
;;; >       (4 + 6 + 2)  : フィールド長 + データ部長 + アラインメント
;;; >       +
;;; >       (4 + 64 + 0) : フィールド長 + データ部長 + アラインメント
;;; >       +
;;; >       8            : データ長
;;; 
;;;  上記レコードのフィールド長の決め方が理解できない。
----------------------------------------------------------------
;;;  char型の場合、フィールド長が4 byte ,smallint型 及び int型 及び timestamp型
;;;  の場合は 0 フィールド長でしょうか?

  そうなります。int などは、データ型でサイズが決まるので、フィールド長は不要です。

;;;  アラインメントについてはどうやって決めるのでしょうか? 
;;;   char型、smallint型、int型、timestamp型によって違うのでしょうか?
;;;   char型のデータが複数ある場合は、順番にも関係があるのでしょうか?

  機械語レベルでのデータ配置のアラインメントと基本的な考え方は同一です。C なら
ば、SunPro、HP-UX、GCC の C コンパイラのマニュアルには、そのコンパイラでの構造
体アラインメントの説明があるはずなので、参考になります。

;;;  ページヘッダを 20 としてと書いてあるが、ページヘッダの決め方について教えてく
;;; ださい。

  src/include/storage/bufage.h の PageHeaderData です。pg_filedump で見ると、
以下の ^^^^ の部分です。

    Block    0 ******************************************************
    <Header> -----
     Block Offset: 0x00000000         Offsets: Lower     280 (0x0118)
     Block Size: 8192                          Upper     392 (0x0188)
     LSN:  logid      0 recoff 0x00137b3c      Special  8192 (0x2000)
     Items:   65                   Free Space:  112
     Length (including item array): 284

      0000: 00000000 00137b3c 00000013 01180188  ......{<........
      	    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      0010: 20002000 3f108078 3e208078 3d308078   . .?..x> .x=0.x
            ^^^^^^^^
      0020: 3c408078 3b508078 3a608078 39708078  <@.x;P.x:`.x9p.x
      0030: 38808078 37908078 36a08078 35b08078  8..x7..x6..x5..x
    ...

;;; >   単インデックスが 2 つなので、インデックスファイルは 2 つになります。インデ
;;; ッ
;;; > クスタプルの長さは、それぞれ、20 と 76 です。
;;; > 
;;;   20,76の計算式は?

  src/include/itup.h の sizeof(IndexTupleData) + キーフィールド長です。

  ヘッダーファイルを見ながら pg_filedump (http://sources.redhat.com/rhdb/tools.html
の下の方) で確かめると掴みやすいです。


Kenji Sugita




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