ページの先頭行へ戻る
Enterprise Postgres 15 導入ガイド(サーバ編)

E.1 テーブルサイズの見積り

テーブルサイズの見積り式を以下に示します。

表E.1 レコード長が2032バイト以下の場合の見積り式

項目

見積り式(バイト)

(1)レコード長

27(注1) + NULLマップ + OID + 列データ

NULLマップ:列の数 ÷ 8 (注2)
OID:4
列データ:列の長さの総和

注1) レコードヘッダ部

注2)小数点以下は整数に切り上げます。

  • 列データは8バイトのバウンダリに配置されるため、レコードヘッダ部 + NULLマップ + OIDの総長は8バイトの倍数となるように調整する必要があります。
    例えば、27 + 1 ÷ 8(切り上げ) + 0 = 28バイトの場合、4を加えて32バイトとしてください。

  • 各列のデータは定義されたデータ型のバウンダリに配置されるため、列データの長さは各データ型のバウンダリを考慮してください。
    例えば、以下のテーブルの列データの長さは、各データ型の総計である37バイトではなく、バウンダリ調整がされ64バイトになります。
      定義:create table tb1(c1 char(1), c2 bigint, c3 int, c4 box)
      見積り:CHAR型1バイト + BIGINT型8バイトのバウンダリ調整7バイト + BIGINT型8バイト + INT型4バイト + BOX型32バイトのバウンダリ調整12バイト + BOX型32バイト = 64バイト

  • 各レコードは8バイトのバウンダリに配置されるため、列データの長さは8バイトの倍数となるように調整する必要があります。

  • 算出したレコード長が2032バイトを超えた場合、レコード中の可変長データが自動的に圧縮されるときがあります。この場合は、“表E.2 レコード長が2032バイトより大きい場合の見積り式”の見積り式でテーブルサイズを見積もってください。

(2)ページの容量

8192(注1) × fillfactor(注2) - 24(注3)

注1) ページ長(8192)

注2) テーブル定義で指定したfillfactorの値(省略時は100%)

注3) ページヘッダ部(24)

  • 算出した(2)ページの容量は、整数となるよう小数点以下を切り下げます。

(3)ページ内レコード数

(2)ページの容量÷ ((1)レコード長 + 4(注1))

注1) ポインター長(4)

  • 算出した(3)ページ内レコード数は、整数となるよう小数点以下を切り下げます。

(4)レコード格納に必要なページ数

総レコード数 ÷ (3)ページ内レコード数

算出した(4)レコード格納に必要なページ数は整数となるよう小数点以下を切り上げます。

(5)スペース量

(4)レコード格納に必要なページ数 × ページ長 × 安全率(注1)

注1) 2.0以上を指定してください。

  • バキュームによるテーブルやインデックス内のガベージが適切に回収されている時の安全率です。

表E.2 レコード長が2032バイトより大きい場合の見積り式

項目

見積り式(バイト)

(5)スペース量

総レコード数 × (1)レコード長 × 安全率(注1)

注1) 2.0以上を指定してください。

  • バキュームによるテーブルやインデックス内のガベージが適切に回収されている時の安全率です。