3.2.2 セグメントの再利用の設定

表データの格納効率を重視する場合は,セグメントの再利用の設定を検討してください。

<この項の構成>
(1) セグメントの再利用とは
(2) セグメントの再利用を行うと効果が期待できるケース
(3) セグメントの再利用を行っても効果が期待できないケース

(1) セグメントの再利用とは

XDBでは,行の追加や更新によって新規ページの割り当てが発生した場合,最終セグメント(最後に確保したセグメント)に新規ページを確保します。最終セグメントに新規ページを割り当てる空き領域がない場合は,新たに新規セグメントを確保して新規ページを割り当てます。

このように,通常は,最終セグメント以外のセグメントの空き領域(行の削除によって発生した空き領域)を利用しません。このため,行の削除が頻繁に発生すると,時間が経過するに連れて表データの格納効率が悪くなります。

表データの格納効率を上げるには,セグメントの再利用を設定します。セグメントの再利用を設定すると,最終セグメントに新規ページを割り当てる空き領域がない場合,新規セグメントを確保しないで,確保済みセグメントから空きページ(未使用ページまたは空きがある使用中ページ)を探し,そのページに表データを格納します。

表データの格納効率を重視する場合は,セグメントの再利用を検討してください。格納効率よりも性能を重視する場合は,セグメントの再利用は行わないでください。

セグメントの再利用を設定するには,CREATE TABLE文のSEGMENT REUSE句にセグメントの再利用契機を指定します。

セグメントの再利用契機
セグメントの再利用契機には,セグメントの再利用を開始する契機をセグメント数で指定します。例えば,セグメントの再利用契機に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」と指定してください。この場合,新規セグメントを確保する前に,必ず空き領域探索が行われるため,表データの格納効率が最も良くなります。ただし,新規セグメントを確保する前に,空き領域探索が必ず発生するため,性能面に影響が出ることがあります。

(3) セグメントの再利用を行っても効果が期待できないケース

行の挿入や更新は頻繁に行うが,行の削除はあまり行わない表の場合は,空き領域があまり発生しません。そのため,セグメントの再利用を行っても,データの格納効率の面で効果が期待できません。

セグメントを再利用しない場合は,SEGMENT REUSE句にNOUSEを指定するか,またはSEGMENT REUSE句の指定を省略してください。