テーブルサイズの計算
作成日時:2024-11-20
更新日時:2024-11-20
あくまでpostgresベース。
テーブルサイズ
テーブル・インデックスサイズ見積もり(PostgreSQL) - infra検証 blog
73.6. データベースページのレイアウト
- テーブルサイズ:ページサイズ × ページ数
- ページサイズ:ページヘッダ(postgresqlは24Byte) + (レコードサイズ × レコード数)
- レコードサイズ:レコードヘッダ(postgresqlは28Byte※) + SUM(レコードのカラムサイズ)
- カラムサイズ:型に応じたデータ格納サイズ
※28という数字はどこから?ドキュメントにあるのを合算すると27Byteにならない?(t_cidはt_xvacと共有している)
→多分MAXALIGN距離で4の倍数になった。
上記の他にオーバーヘッドがある。
- ページサイズに収まるように調整した結果、発生した断片
- NULLビットマップ。NULL値管理用の領域。1ビット/レコードとか。
- その他DBMS固有のもの
データ圧縮の影響なども。
簡易的見積
全体サイズを下記の観点で計算する。
- テーブルサイズ:ページサイズ × ページ数
- ページサイズ:レコードサイズ × レコード数
- レコードサイズ:SUM(レコードのカラムサイズ)
- カラムサイズ:型に応じたデータ格納サイズ
ヘッダやオーバヘッドの分として、計算結果を10%~30%程度追加する。
インデックスサイズ見積
詳細は上記リンク参照。
可変長データ型のサイズ
公式ドキュメントではこんな感じ。
NUMERIC → ceil(格納している桁数 ÷ 4) × 2 + 3~8(※1)
VARCHAR → 文字数を保持する領域(※2)+実文字数×1文字あたりのバイト数
※1
3~8は実際の格納数により変わる。
格納されている値の桁数が大きければ大きくなる。
※2
サイズ部長は、データのサイズ(文字数、桁数)が127未満だと1バイト。
127以上だと4バイト使用する。
実際の格納サイズの確認
SELECT pg_column_size(col) FROM tbl;
リンク
第5回 PostgreSQL でのデータベース構築の際に必要となる物理設計のポイント | Let’s POSTGRES
4. MVCCとストレージ構造 · PostgreSQL Internals
テーブル・インデックスサイズ見積もり(PostgreSQL) - infra検証 blog