PSQL Programmer's Guide (v11)

ページ サイズの選択 (トランザクショナル インターフェイス)

データ ファイル内のすべてのページは同じサイズです。したがって、ファイル内のページのサイズを決定するときは、以下の問題に答える必要があります。

以降では、これらの問題の答えを導き出す方法を説明します。得られた解答で、ファイルに最も合うページ サイズを選択できます。

ディスク領域を最小限にするための最適なページ サイズ

ファイルの最適なページ サイズを決定する前に、まずファイルの物理レコード長を計算する必要があります。物理レコード長は、論理レコード長とファイルのデータ ページ上にレコードを格納するのに必要なオーバーヘッドとの合計です(ページ サイズの一般的な情報については、「ページ サイズ」を参照してください)。

トランザクショナル データベース エンジンは常に、すべてのレコードに最低 2 バイトのオーバーヘッド情報をそのレコードの使用量カウントとして格納しています。また、トランザクショナル データベース エンジンは、ファイル内でのレコードとキーの定義方法により、各レコード内に追加バイトを格納します。

次の表は、レコードの圧縮を使用しない場合、ファイルの特性によってレコード オーバーヘッドが何バイト必要になるかを示します。

表 17 レコードの圧縮を使用しない場合のレコード オーバーヘッドのバイト数
ファイルの特性
ファイル形式
6.x
7.x
8.x
9.0 および 9.5
使用回数
2
2
2
2
重複キー(キーごとに)
8
8
8
8
可変ポインター(可変長レコード)
4
4
6
6
レコード長(VAT 1 を使用する場合)
4
4
4
4
ブランク トランケーションの使用(VAT 使用/VAT 不使用)
2/4
2/4
2/4
2/4
システム データ
N/A2
8
8
8
1 VAT:可変長部割り当てテーブル
2 N/A:適用外

次の表は、レコードの圧縮を使用する場合、ファイルの特性によってレコード オーバーヘッドが何バイト必要になるかを示します。

表 18 レコードの圧縮を使用した場合のレコード オーバーヘッドのバイト数
ファイルの特性
ファイル形式
6.x
7.x
8.x
9.0 および 9.5
使用回数
2
2
2
2
重複キー(キーごとに)
8
8
8
8
可変ポインター
4
4
6
6
レコード長(VAT 1 を使用する場合)
4
4
4
4
レコード圧縮フラグ
1
1
1
1
システム データ
N/A2
8
8
8
1 VAT:可変長部割り当てテーブル
2 N/A:適用外

次の表は、ページのタイプによってページ オーバーヘッドが何バイト必要になるかを示します。

表 19 ページ オーバーヘッド(バイト数)
ページのタイプ
ファイル形式
6.x
7.x
8.x
9.0
9.5
データ
6
6
8
8
10
インデックス
12
12
14
14
16
変数
12
12
16
16
18

次の表は、ファイルのレコードおよびキーの定義方法に基づいて、物理レコード長を算出するため、論理レコード長に追加しなければならないオーバーヘッドのバイト数を示しています。レコードのオーバーヘッドの一覧は、表 17 および表 18 にもあります。

表 20 物理レコード長のワークシート
説明
論理レコード長を算定します。手順については、論理レコード長の計算 (トランザクショナル インターフェイス)を参照してください。
このワークシートのファイルの例では、72 バイトの論理レコードを使用します。可変長レコードを持つファイルの場合、論理レコード長はレコードの固定長部分のみを指します。
72
レコード使用カウントに 2 を加算します。
圧縮レコードのエントリでは、使用カウント、可変ポインター、レコード圧縮フラグを加算する必要があります。
6.x および 7.x:7 バイト(2 + 4 + 1)
v8.x 以降:9 バイト(2 +6 + 1)
72 + 2 = 74
リンク重複キーごとに、8 を加算します。
重複キーのためのバイト数を算出する場合、トランザクショナル データベース エンジンは作成時に繰り返し重複として定義されているキーに対して重複ポインター スペースを割り当てません。デフォルトでは、ファイル作成時に作成された重複を許すキーがリンク重複キーです。圧縮レコードのエントリでは、重複キーのポインター用に 9 を加算します。
ファイル例には、1 つのリンク重複キーがあります。
74 + 8 = 82
予約重複ポインターごとに、8 を加算します。ファイル例には予約重複ポインターはありません。
82 + 0 = 82
ファイルが可変長レコードを許可している場合、8.x より前のファイルでは 4 を加算し、8.x 以降のファイルでは 6 を加算します。
ファイル例では可変長レコードを許可していません。
82 + 0 = 82
ファイルが VAT を使用している場合、4 を加算します。
ファイルの例では、VAT を使用していません。
82 + 0 = 82
ファイルがブランク トランケーションを使用する場合は、以下のいずれかを加算します。
  • ファイルが VAT を使用しない場合、2 を加算します。
  • ファイルが VAT を使用する場合、4 を加算します。
ファイルの例では、VAT を使用していません。
82 + 0 = 82
ファイルでシステム キーの作成にシステム データを使用する場合は 8 を加算します。
ファイルの例では、System Data を使用していません。
82 + 0 = 82
 
物理レコード長
82

物理レコード長を使用して、データ ページに対するファイルの最適ページ サイズを決定できます。

トランザクショナル データベース エンジンはデータ レコードの固定長部分をデータ ページに格納しますが、固定長部分をページをまたいで分割することはしません。また、トランザクショナル データベース エンジンは各データ ページにオーバーヘッド情報を格納します(表 17 および 18 を参照してください)。ページ サイズを決定するときは、この追加のオーバーヘッドを計算する必要があります。

選択したページ サイズからオーバーヘッド情報のバイト数を差し引いたものが物理レコード長の正確な倍数にならない場合、ファイルには未使用領域が含まれています。次の式を使用して、効率のよいページ サイズを見つけることができます。

未使用バイト = (ページ サイズ - 表 17 および表 18 ごとのデータ ページ オーバーヘッド) mod 
(物理レコード長) 

ファイルによるディスク領域の使用量を最適化するには、未使用領域を最小にしてレコードをバッファーに格納できるページ サイズを選択します。サポートされるページ サイズはファイル形式により異なります。表 21 を参照してください。内部レコード長(ユーザー データ + レコード オーバーヘッド)が小さく、ページ サイズが大きいと、無駄な領域がかなりの量になる可能性があります。

最適なページ サイズの例

物理レコード長が 194 バイトの例を考えてみましょう。以下の表に、ページ サイズごとに、ページに格納できるレコード数とページに残る未使用領域のバイト数を示します。

表 21 物理レコード長の例:194 バイト
適用可能なファイル形式
ページ サイズ
1 ページあたりのレコード数
未使用バイト
v8.x より前
512
2
118
(512 - 6) mod 194
8.x から 9.0
116
(512 - 8) mod 194
v8.x より前
1,024
5
48
(1,024 - 6) mod 194
8.x から 9.0
46
(1,024 - 8) mod 194
9.5
44
(1,024 - 10) mod 194
v8.x より前
1,536
7
172
(1,536 - 6) mod 194
8.x から 9.0
172
(1,536 - 6) mod 194
v8.x より前
2,048
10
102
(2,048 - 6) mod 194
8.x から 9.0
100
(2,048 - 8) mod 194
9.5
98
(2,048 - 10) mod 194
v8.x より前
2,560
13
32
(2,560 - 6) mod 194
8.x から 9.0
32
(2,560 - 6) mod 194
v8.x より前
3,072
15
156
(3,072 - 6) mod 194
8.x から 9.0
156
(3,072 - 6) mod 194
v8.x より前
3,584
18
86
(3584 - 6) mod 194
8.x から 9.0
86
(3584 - 6) mod 194
v8.x より前
4,096
21
16
(4096 - 6) mod 194
8.x から 9.0
14
(4096 - 8) mod 194
9.5
12
(4096 - 10) mod 194
9.0
8,192
42
36
(8192 - 8) mod 194
9.5
34
(8192 - 10) mod 194
9.5
16, 384
84
78
(16,384 - 10) mod 194
計画として、ページおよびレコード オーバーヘッドの量は、今後のアップグレードによるファイル形式で増える可能性があることに注意してください。現在のファイル形式でページにきっちり収まるレコード サイズを考えた場合、そのサイズが将来のバージョンのファイル形式に合うためには、もっと大きなページ サイズが必要になるかもしれません。
また、レコードおよびオーバーヘッドが指定されたページ サイズ内に収まらない場合、データベース エンジンが自動的にページ サイズを更新します。たとえば、9.x のファイルに対しページ サイズ 4,096 を指定し、レコードおよびオーバーヘッドの要件が 4,632 バイトだと仮定します。この場合、データベース エンジンはページ サイズ 8,192 を使用します。

表に示すように、ページ サイズ 512 を選択すると 1 ページに 2 つのレコードしか格納できず、ファイル形式によって各ページの 114 ~ 118 バイトが未使用になります。しかし、ページ サイズ 4,096 を選択すると、1 ページあたり 21 個のレコードを格納でき、各ページの 16 バイトだけが未使用になります。同じ 21 レコードでも、ページ サイズ 512 では 2 KB 以上の無駄な領域ができてしまいます。

物理レコード長が非常に小さい場合は、ほとんどのページ サイズで無駄になる領域は非常にわずかです。ただし、v8.x より前のファイルではページごとに最大 256 レコードという制限があります。この場合、物理レコード長が小さいのに大きなページ サイズ(たとえば、4,096 バイト)を選択すると、無駄な領域が大きくなります。例として、表 22 に 8.x より前のファイル バージョンに対して 14 バイトのレコード長を設定した場合の動作を示します。

表 22 8.x より前のファイル バージョンの例:レコード長 14 バイト
ページ サイズ
1 ページあたりのレコード数
未使用バイト
512
36
2
(512 - 6) mod 14
1,024
72
10
(1,024 - 6) mod 14
1,536
109
4
(1,536 - 6) mod 14
2,048
145
12
(2,048 - 6) mod 14
2,560
182
6
(2,560 - 6) mod 14
3,072
219
0
(3,072 - 6) mod 14
3,584
255
8
(3,584 - 6) mod 14
4,096
256
506
(4,096 - 6) mod 14

最大ページ サイズ

選択するページ サイズは、8 つのキー値にオーバーヘッドを加えた値を保持できるほどの大きさが必要です。ファイルに対して許容できる最小ページ サイズを見つけるには、表 23 で指定された値を追加します。

表では例として 9.5 ファイル形式を使用します。

表 23 最小ページ サイズ ワークシート
説明
バイト単位でファイル内の最大キーのサイズを決定します(社員ファイル例では、最大キーは 25 バイトです)。
一意のキーを定義していないファイルでは、システムで定義された、システム データとも呼ぶログ キーが最大キーである場合があります。そのサイズは 8 バイトです。
25
以下のうちの 1 つを追加します。
  • 重複を許さないキーまたは繰り返し重複を使用するキーの場合は、8 バイトを加算します。
  • リンク重複を使用するキーには 12 バイトを加算します(この例ではリンク重複を使用します)。
25 + 12 = 37
結果に 8 を掛けます(トランザクショナル データベース エンジンでは、1 ページに 8 個以上のキーのスペースが必要です)。
37 * 8 = 296
ファイル形式のインデックス ページ オーバーヘッドを追加します。
19 でインデックス ページの項目を参照してください。
296 + 16 = 312
最小ページ サイズ
312 バイト

計算結果以上の有効なページ サイズを選択します。ここで、選択するページ サイズがファイル作成後に作成されたキーのサイズを収容できるサイズでなければならないことに注意してください。キー セグメントの総数は、最小ページ サイズを指示する場合があります。たとえば、ページ サイズ 512 を使用するファイルには 8 個のキー セグメントしか定義できません。

表 24 最小ページ サイズ ワークシート
ページ サイズ
ファイル バージョンによるキー セグメント数
6.x および 7.x
8.x
9.0
9.5
512
8
8
8
N/A
1,024
23
23
23
97
1,536
24
24
24
N/A
2,048
54
54
54
97
2,560
54
54
54
N/A
3,072
54
54
54
N/A
3,584
54
54
54
N/A
4,096
119
119
119
204
8,192
N/A
N/A
119
420
16,384
N/A
N/A
N/A
420
N/A は「適用外」を意味します。


論理レコード長の計算 (トランザクショナル インターフェイス)

ファイル サイズの予測 (トランザクショナル インターフェイス)