[pgsql-jp: 27739] Re: 見積り表領域と
sugita @ sra.co.jp
sugita @ sra.co.jp
2002年 10月 25日 (金) 15:38:07 JST
杉田です。
From: "KAWAI,Takanori" <GCD00051 @ nifty.ne.jp>
Subject: [pgsql-jp: 27738] Re: 見積り表領域と
Date: Fri, 25 Oct 2002 15:12:25 +0900
;;; 仕事の関係で7.1.3での表領域の使用量の見通しを計算していた
;;; のですが、その関係でいくつか気になった点について指摘させて
;;; いただきます。
;;; 自分でまとめようかと思ってはいるのですが、まだちょっと混乱気味。
;;;
;;; ----- Original Message -----
;;; From: <sugita @ sra.co.jp>
;;; To: <pgsql-jp @ ml.postgresql.jp>
;;; Sent: Wednesday, September 04, 2002 1:24 PM
;;; Subject: [pgsql-jp: 27292] Re: 見積り表領域と
;;;
;;;
;;; > 杉田です。
;;; (中略)
;;; > ================================================================
;;; >
;;; >
;;; > ディスク領域の見積りの概要
;;; >
;;; >
;;; > $Revision: 1.13 $
;;; >
;;; > 1. 圧縮のない場合のテーブルサイズの概算見積もり方法
;;; >
;;; > int4 の 1 フィールドのテーブルで 10 万レコードの場合の見積もりは以下の
;;; よう
;;; > になります。
;;; >
;;; > 32 + 4 + 4 + 4 = 44 … レコードサイズ。
;;; >
;;; > 各行のヘッダ 32 バイト (7.3 では 28 バイト)
;;; > + フィールド数 32 で、NULL 値がある場合の NULL ビットマスク
;;; > + ページ内のタプルへのポインタ
;;; > + int4 のサイズ
;;; >
;;; > 8192 / 40 = 187 … ブロックあたりのレコード数。
;;; >
;;; > データベースページ数 /レコードサイズ。
;;; このでの分母の40は44のtypoだと思われます。
はい、以前、指摘を受け直しました。
;;; さらに英語のFAQ(*1)と日本語のほうとで切り上げ、切捨てで
;;; 違っているようです。
;;; 日本語(*2)のほうではブロックあたりのレコード数を切り上げにして
;;; いますが、英語のほうではブロックあたりのレコード数は切り捨て、
;;; 使用するページ数を切り上げています。
;;; 感覚的にも1つのブロックにレコードがいくつ入るかということですから、
;;; 切捨てのほうがしっくりきます。
切捨てているつもりで、間違えました。ありがとうございます。
;;; (*1) http://www.ca.postgresql.org/docs/faq-english.html#4.6
;;; (*2) http://www.postgresql.jp/subcommittee/jpugdoc/faq-japanese.html#4.6
;;;
;;; ただ、それに基づいて187ではなく186で計算すると。
;;; ブロック数は537.63 => 538, 使用ディスク量: 4,407,296
;;; となり、さらに実測値と違ってきます。
;;;
;;; これはNULLビットマスクが常に入るという計算にしているからでは
;;; ないかと思われます。
Revision: 1.13 の資料に NULL ビットマスクを全行に必要とコメントしたので、、、
;;; そこで、その分を引いて、これをレコードの大きさを
;;; 40として計算すると
引かないで、最悪の場合で見積もってもいいんじゃないでしょうか。
;;; ブロックあたりのレコード数: 204.8 => 204
;;; 使用ページ数 使用ディスク量
;;; 100,000 : 490.19 => 491 4,022,272
;;; 200,000 : 980.39 => 981 8,036,352
;;; 300,000 : 1470.58 => 1471 12,050,432
;;; 400,000 : 1960.78 => 1961 16,064,512
;;; 500,000 : 2450.98 => 2451 20,078,592
;;;
;;; (7.3ではヘッダの大きさの関係から => 36)
;;; 使用ページ数 使用ディスク量
;;; ブロックあたりのレコード数: 227.55 => 227
;;; 100000: 440.53 => 441 3,612,672
;;; 200000: 881.06 => 882 7,225,344
;;; 300000: 1321.59 => 1322 10,829,824
;;; 400000: 1762.11 => 1763 14,442,496
;;; 500000: 2202.64 => 2203 18,046,976
;;;
;;; となりピッタリ合致します。
7.3 では NULL の持ち方も少し違いますね。
;;; > 4. データ圧縮
この返事ではパスさせてください。
;;; ただ客先からは「管理上のディスク使用量を予測したい」という
;;; ことなので、pg_classのrelpagesとreltuplesを見て、1レコードあたりの
;;; 平均値を求めて、出すようなものも用意する必要があるかなぁと
;;; 今は考えています。
ソートワークファイル、インデックス作成ワークファイルなども考えて、予測したい
とは思いますが、、、
Kenji Sugita
pgsql-jp メーリングリストの案内