(2) ページ
3 データベースの設計
3.2 表の設計
ここでは,表を定義するときの考慮点について説明します。
3.2.1 列に定義できるデータ型
表の各列に適切なデータ型を定義してください。列に定義できるデータ型を次の表に示 します。
表
3-1 列に定義できるデータ型
各データ型の詳細については,マニュアル「TP1/EE/Extended Data Cache SQLプログ ラミング」を参照してください。
3.2.2 セグメントの再利用の設定
表データの格納効率を重視する場合は,セグメントの再利用の設定を検討してください。
(1) セグメントの再利用とは
XDB
では,行の追加や更新によって新規ページの割り当てが発生した場合,最終セグメ ント(最後に確保したセグメント)に新規ページを確保します。最終セグメントに新規 ページを割り当てる空き領域がない場合は,新たに新規セグメントを確保して新規ペー ジを割り当てます。このように,通常は,最終セグメント以外のセグメントの空き領域(行の削除によって 発生した空き領域)を利用しません。このため,行の削除が頻繁に発生すると,時間が 経過するに連れて表データの格納効率が悪くなります。
表データの格納効率を上げるには,セグメントの再利用を設定します。セグメントの再 利用を設定すると,最終セグメントに新規ページを割り当てる空き領域がない場合,新 規セグメントを確保しないで,確保済みセグメントから空きページ(未使用ページまた は空きがある使用中ページ)を探し,そのページに表データを格納します。
表データの格納効率を重視する場合は,セグメントの再利用を検討してください。格納 効率よりも性能を重視する場合は,セグメントの再利用は行わないでください。
項番 分類 データ型 説明
1 数データ INTEGER 整数を扱うデータ型です。
2 DECIMAL 固定小数点数を扱うデータ型です。
3 文字データ CHARACTER 固定長文字列を扱うデータ型です。
4 時刻印データ TIMESTAMP 年,月,日,時,分,秒の六つの属性を持 つ時刻印のデータ型です。
グメントの再利用契機を指定します。
■セグメントの再利用契機
セグメントの再利用契機には,セグメントの再利用を開始する契機をセグメント数 で指定します。例えば,セグメントの再利用契機に
3(SEGMENT REUSE 3)を指
定した場合,表に三つのセグメントが割り当てられている状態で,最終セグメント に空き領域がないときに,セグメントの再利用が行われます。セグメントの再利用の概要を次の図に示します。
図
3-2 セグメントの再利用の概要
参考
• 確保済みセグメントから空き領域(未使用ページまたは空きがある使用中ページ)を探す 処理を空き領域探索といいます。
• 空き領域探索によって探したページに表データを格納した場合,次回の空き領域探索で は,前回,表データを格納したページの位置から探索を開始します。
• 次に示す場合は,セグメントの再利用を設定しているかどうかに関係なく,空き領域探索 が発生します。
・メモリ領域不足によって,DBエリアの自動増分機能でDBエリアを拡張できない場合
・最大確保共用メモリ面数に達していて,かつ新規セグメントを確保できない場合
• セグメントの再利用を設定している場合は,次に示すときにも空き領域探索が発生しま す。
・最大確保共用メモリ面数に達する前の状態で,DBエリアの自動増分機能でDBエリア を拡張しなければ新規セグメントを確保できないとき
(2) セグメントの再利用を行うと効果が期待できるケース
データの格納効率を重視する場合に,セグメントの再利用を行ってください。
例えば,行の削除が多く発生し,最終セグメント以外に空き領域が多く発生するような 場合にセグメントの再利用を行うと,データの格納効率の面で効果が期待できます。
セグメントの再利用を設定するには,CREATE TABLE文の
SEGMENT REUSE
句で1
回目のセグメントの再利用契機と2
回目以降のセグメントの再利用契機を指定します。SEGMENT REUSE
句の指定例を次に示します。指定例
このように指定した場合,セグメントの再利用契機は,セグメント数が
4,6(4
+2
=6)
,8(4+2
+2
=8)
,…のときとなります。■再利用契機に指定する値の目安
表に格納されている行数の増減予測が難しい場合や,表データの格納効率を重視す る場合は,「SEGMENT REUSE 1,1」と指定してください。この場合,新規セグメ ントを確保する前に,必ず空き領域探索が行われるため,表データの格納効率が最 も良くなります。ただし,新規セグメントを確保する前に,空き領域探索が必ず発 生するため,性能面に影響が出ることがあります。
まり発生しません。そのため,セグメントの再利用を行っても,データの格納効率の面 で効果が期待できません。
セグメントを再利用しない場合は,SEGMENT REUSE句に