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