2.2.3 DBエリアの構造
DBエリアは,セグメントおよびページという単位で構成されます。1つのDBエリアは,複数のセグメントから構成されます。また,1つのセグメントは複数のページから構成されます。DBエリアの構造を次の図に示します。
|
|
(1) セグメント
セグメントは,表およびインデクスを格納するときの最小単位です。1つのセグメントには,1つの表または1つのインデクスが格納されます。セグメントと,表およびインデクスの関係を次の図に示します。
|
|
なお,1つのセグメントに複数の表,または複数のインデクスは格納されません。セグメントに,表およびインデクスが格納されない例を次の図に示します。
|
|
(a) セグメントの種類
セグメントは,セグメントに割り当てられるページの種類によって次のように分類されます。セグメントの種類を次の表に示します。ページの種類については,「2.2.3(2)(a) ページの種類」を参照してください。
(b) セグメントが割り当てられるタイミング,解放されるタイミング
- セグメントが割り当てられるタイミング
-
セグメントは,新規にページを確保したときに割り当てられます。すでに割り当てられているセグメントに,空きページがない場合は,新規にセグメントが確保されて割り当てられます。
ただし,次に示す場合は,すでに割り当てられているセグメントに空きページがあっても,新規にセグメントが確保されて割り当てられます。
-
バックグラウンドインポートを実行する場合
-
複数のチャンクをマージする場合
-
チャンクの状態変更でカレントチャンクが切り替わり,新規にチャンクが作成される場合
-
- セグメントが解放されるタイミング
-
割り当てられたセグメントは,次のタイミングで解放されます。
-
実表およびインデクスを削除したとき
-
実表の行データをすべて削除したとき(TRUNCATE TABLE文を実行したとき)
-
既存データをすべて削除する指定をして,実表にデータをインポートしたとき
-
チャンクを削除したとき
-
インデクスを再作成したとき
-
複数のチャンクをマージ後に,マージ元チャンクのインデクスのデータを削除したとき
-
チャンクをアーカイブ状態にしたとき
-
アーカイブマルチチャンク表から,レギュラーマルチチャンク表に変更したとき(ALTER TABLE文を実行したとき)
-
(2) ページ
ページは,ディスクI/O時の最小単位になります。ディスク上のデータを読み込むときや,ディスク上にデータを書き込むときは,ページ単位で実行されます。
(a) ページの種類
ページは,格納するデータの種類によって次のように分類されます。ページの種類を次の表に示します。
- 注※1
-
B-treeインデクスとインデクスページの関係を次の図に示します。
- 注※2
-
作業表用ページは,作業表を作成するSQLを実行したときに確保されます。
- 注※3
-
ディレクトリページは,DBエリアを作成するときに一定数確保されます。そのあとは,データページやインデクスページが一定量に達するごとに,新たなページが確保されます。
- ■基本行および分岐行とは
-
通常,1行のデータは同一ページに格納されますが,定義長が255バイトを超える可変長列がある場合,1行のデータが別ページに分割されて格納されることがあります。別ページに格納された行を分岐行といい,分岐先の情報を持つ行を基本行といいます。
なお,可変長列データが別ページに分割されて格納されるかどうかについては,表定義時(CREATE TABLE文実行時)に指定できます。
- ■ディレクトリページ群の存在とディレクトリページの配置
-
DBエリアファイルの先頭部分には,次に示す情報を管理するディレクトリページ群が存在します。
-
DBエリアの定義情報
-
定義された表およびインデクスの情報
-
チャンクの情報
DBエリアを構成する先頭のDBエリアファイルの場合は,ディレクトリページ群に,DBエリアの情報を管理するディレクトリページも含まれます。そのため,ディレクトリページの配置が,先頭のDBエリアファイルと2番目以降のDBエリアファイルでは異なります。
また,表およびインデクスを格納するセグメントは,ディレクトリページ群の後ろに配置されます。また,一定間隔でセグメントの情報を管理するディレクトリページが配置されます。そのため,DBエリアファイルのすべての領域が,表およびインデクスを格納するセグメントに使用されるわけではありません。
DBエリアファイル内のディレクトリページの配置例を,次の図に示します。
図2‒16 DBエリアファイル内のディレクトリページの配置例 -
(b) ページが割り当てられるタイミング,解放されるタイミング
- ページが割り当てられるタイミング
-
データページ,およびインデクスページが割り当てられるタイミングを次に示します。
-
表に行を追加したとき,および行を更新したとき
基本行用ページ,および分岐行用ページは,表に行を追加したとき,および行を更新したときに割り当てられます。CREATE TABLE文を実行して表を定義したときには割り当てられません。
行の追加を繰り返して,すでに割り当てられたページが満杯になった場合は,新規にページが確保されて,割り当てられます。
レンジインデクスのインデクスページは,表に行を追加したとき,および行を更新したときに割り当てられます。
-
B-treeインデクスを定義したとき
CREATE INDEX文を実行してB-treeインデクスを定義したときに,上位ページと,リーフページが1つずつ割り当てられます。
-
B-treeインデクスのインデクスページスプリットが発生したとき
B-treeインデクスのインデクスページスプリットが発生するたびに,新規のインデクスページが確保されて,割り当てられます。B-treeインデクスのインデクスページスプリットについては,「5.3.4(2) B-treeインデクスのインデクスページスプリット」を参照してください。
-
テキストインデクスを定義したとき
CREATE INDEX文を実行してテキストインデクスを定義したときに,文字列管理部ページと,出現情報管理部ページが2つずつ割り当てられます。
-
テキストインデクスのインデクスページスプリットが発生したとき
テキストインデクスのインデクスページスプリットが発生するたびに,新規のインデクスページが確保されて,割り当てられます。テキストインデクスのインデクスページスプリットについては,「5.4.2(2) テキストインデクスのインデクスページスプリット」を参照してください。
-
レンジインデクスを定義したとき
CREATE INDEX文を実行してレンジインデクスを定義したときに,1セグメント分のDBエリアファイル管理部ページが割り当てられます。
-
- ページが解放されるタイミング
-
セグメントが解放されたときに,セグメント内のすべてのページが解放されます。
(c) ページグループ
レンジインデクスの値域情報部用のセグメントからページを割り当てる場合,HADBは複数のページをまとめて確保します。このとき,まとめて割り当てられるページの単位をページグループといいます。また,ページグループを構成するページ数をページグループサイズといいます。
ページグループサイズを求める場合は,「5.8.6(1) 変数SGRIの求め方」の変数PGGRPSIZEを参照してください。
レンジインデクスのページグループサイズを確認する場合は,「9.8.5 レンジインデクスの状態や使用量を確認したい場合」を参照してください。