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

sugita @ sra.co.jp sugita @ sra.co.jp
2002年 8月 25日 (日) 16:25:27 JST


  杉田です。

From: "sasaki" <GSP05271 @ nifty.com>
Date: Sun, 25 Aug 2002 14:33:50 +0900 (JST)

;;; >   スキーマ、データの概要、件数、サイズを具体的に教えてもらえますか?

  実際の計算結果、oid からのファイルの同定結果、ファイルのサイズもあると、あい
まいさが減ります。

;;; 件数:200

  件数が少ないので、ぎりぎりでページヘッダでの誤差が出ています。それと、レコー
ド長の求め方が違っています。

;;; テーブル内容:
;;;    コード  char(6)   プライマリーキー
;;;    名前      char(64) ユニークキー
;;;    時間     timestamp
;;; ----------------------------
;;;   レコード長:  78 byte
;;; 
;;; 表領域の計算式 :
;;;  (1)ブロックあたりのレコード長: 8192/(各行のヘッダのバイト数(32)+フィール
;;; ド数32で、NULL値がある場合のNULLビットマスク(4)   +レコード長(78)+ページ上のタ
;;; ップルへのポインタ(4))

  レコードのデータ部分は、6 + 64 + 8 = 78 でなく、次のようになります。

      (4 + 6 + 2)  : フィールド長 + データ部長 + アラインメント
      +
      (4 + 64 + 0) : フィールド長 + データ部長 + アラインメント
      +
      8            : データ長

NULL 値がないようにデータを入れると、1 レコード辺り必要なのは、32 + 88 + 4 =
124。ページヘッダを 20 として、(8192 - 20) /124 = 65 (切捨て)。ブロック数 
200/65 は、切り上げで、4。従って、ファイルサイズは、8192*4 = 32768 となり実際
のファイルサイズと一致します。

;;;  (2)使用ブロック数:件数(200)/(1)の値
;;;  (3)容量:(2)*ブロックサイズ(8192)
;;;
;;; インデックスの計算式:
;;;  (1)オーバーヘッド(12) + キーの長さ(6+64)

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

;;;   (2)8192/(1)の値
;;;  (3)使用ブロック数:件数(200)/(2)の値
;;;  (4)容量:(3)*ブロックサイズ(8192)

  インデックスファイルの 1 レコード目は、メタデータで、B 木のルート位置・レベ
ルが入っています。200 件なので、B 木の索引部の誤差はありませんが、メタデータで
誤差が出るでしょう。

  あの見積もりは、データ件数が 10 万〜と多いときに、無視できるような要素は考え
ていません。データ件数が少ないときには、より正確に見積もることになります。


Kenji Sugita




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