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