(4) 領域の見積もり
ユーザデータの見積もり
テーブルファイル
テーブルファイルサイズ=8kB×ブロック数
ブロック数=総レコード数÷1ページ格納レコード数
1ブロック格納レコード数=ブロック最大使用可能サイズ×平均充填率÷レ コードサイズ
インデックスファイル
インデックスファイルサイズ≒8kB×リーフノード数
リーフノード数=総レコード数÷1ページ格納エントリ数
1ブロック格納エントリ数=ブロック最大利用可能サイズ×平均充填率÷イ
ンデックスタプルサイズ
テーブルのページレイアウト
テーブルファイルのページブロックは、ページヘッダ、アイテムポインタ、タプル ヘッダ、およびタプルデータで構成される。
ページヘッダ
アイテムポインタ1 アイテムポインタ2 アイテムポインタ3
タプルデータ1 タプルデータ2 タプルデータ
3
(空きスペース)
8KB
タプルヘッダ
3
タプルヘッダ
2
タプルヘッダ
1
ページヘッダを除くスペースを、アイテムポインタが 前から、レコードデータが後ろから使う。
アイテムポインタは、タプルヘッダの開始位置、およ び長さを保持する。
タプルヘッダは、そのタプルを作成、削除したトラン ザクションのXIDを保持する(タプルの可視性の判断 に使用)。
ページヘッダ(PageHeaderData 28バイト)
アイテムポインタ (ItemIdData 4バイト)
タプルヘッダ (HeapTupleHeaderData 24バイト)
タプルデータ (可変、データ型に依存)データ型とデータサイズ
第8章 データ型
http://www.postgresql.jp/document/9.0/html/datatype.html
B-Tree(リーフ)のページレイアウト
B-Treeインデックスのリーフページブロックは、ページヘッダ、アイテムポインタ、
インデックスタプルで構成される。
ページヘッダ
アイテムポインタ1 アイテムポインタ2
インデックスタプル1 インデックスタプル2
(空きスペース)
8KB
ページヘッダを除くスペースを、アイテムポインタが 前から、インデックスタプルが後ろから使う。
インデックスタプルは、テーブルファイル内における 該当レコードの「ブロック番号」と「アイテム番号」、およびキーの値を保持する。
スペシャルデータは、B-Treeにおける「隣のノードの ブロック番号」や「ツリー中の深さ」を保持する(イン デックススキャンで利用)。
ページヘッダ(PageHeaderData 28バイト)
インデックスタプル(IndexTupleData 8バイト+可 変、キーサイズに依存)
スペシャルデータ(BTPageOpaqueData 16バイト)スペシャルデータ アイテムポインタ3
インデックスタプル3
WALファイルの見積もり
トランザクションログ領域(オンラインWAL)
WALファイルは循環的(cyclic)に使用されるため、最大容量が決まる
アーカイブログ領域(アーカイブWAL)
ベースバックアップ(非一貫性バックアップ)の間で生成され、アーカイブされ るトランザクションログ
机上での見積もりは難しいので、実際にトランザクションを実行して見積もる
更新トランザクションの量とベースバックアップの頻度から算出。
トランザクションログ領域の見積もり
最大容量は 16MB×(checkpoint_segments × 3 + 1)
WALセグメントファイル(16MB)
各チェックポイント間の最大WALセグメント数(checkpoint_segments)
WALを保持しているチェックポイント数(3)
ドキュメント内
スライド 1
(ページ 38-45)