2.4.3 DBエリアの構造(セグメントとページ)
DBエリアは,セグメントおよびページという単位で構成されます。1つのDBエリアは,複数のセグメントから構成されます。また,1つのセグメントは複数のページから構成されます。DBエリアの構造を次の図に示します。
(1) セグメント
セグメントは,表およびインデクスを格納するときの最小単位です。1つのセグメントには,1つの表または1つのインデクスが格納されます。セグメントと,表およびインデクスの関係を次の図に示します。
なお,1つのセグメントに複数の表,または複数のインデクスは格納されません。セグメントに,表およびインデクスが格納されない例を次の図に示します。
(a) セグメントの種類
セグメントは,セグメントに割り当てられるページの種類によって次のように分類されます。セグメントの種類を次の表に示します。ページの種類については,「2.4.3 DBエリアの構造(セグメントとページ)」の「(2) ページ」の「(a) ページの種類」を参照してください。
項番 |
セグメントの種類 |
説明 |
|
---|---|---|---|
1 |
表(ローストア形式の場合) |
基本行用セグメント |
基本行を格納するページ(基本行用ページ)を割り当てるセグメントです。 |
2 |
分岐行用セグメント |
分岐行を格納するページ(分岐行用ページ)を割り当てるセグメントです。 |
|
3 |
表(カラムストア形式の場合) |
カラムデータ用セグメント |
カラムストア表にデータインポートした際に,カラムストア形式でデータを格納するセグメントです。 また,更新行のカラム化機能によってローストア形式からカラムストア形式に変換されたデータも,カラムデータ用セグメントに格納されます。更新行のカラム化機能については,「11.19 更新行のカラム化機能の運用(カラムストア表の検索性能の維持)」を参照してください。 |
4 |
ローデータ用セグメント |
カラムストア表にデータインポートした際に,分岐したデータ(分岐行)を格納するセグメントです。 また,次に示すデータも,ローデータ用セグメントに格納されます。
|
|
5 |
B-treeインデクス |
上位ページ用のセグメント |
B-treeインデクスのルートページ,および中間ページを割り当てるセグメントです。 |
6 |
下位ページ用のセグメント |
B-treeインデクスのリーフページ,行IDディレクトリページおよび行IDリストページを割り当てるセグメントです。 |
|
7 |
テキストインデクス |
文字列管理部用のセグメント |
テキストインデクスの文字列管理部ページを割り当てるセグメントです。 |
8 |
出現情報管理部用のセグメント |
テキストインデクスの出現情報管理部ページを割り当てるセグメントです。 |
|
9 |
レンジインデクス |
DBエリアファイル管理部用のセグメント |
レンジインデクスのDBエリアファイル管理部ページを割り当てるセグメントです。 |
10 |
値域情報部用のセグメント |
レンジインデクスのセグメント管理部ページ,および値域情報部ページを割り当てるセグメントです。 |
(b) セグメントが割り当てられるタイミング,解放されるタイミング
- セグメントが割り当てられるタイミング
-
セグメントは,新規にページを確保したときに割り当てられます。すでに割り当てられているセグメントに,空きページがない場合は,新規にセグメントが確保されて割り当てられます。
ただし,次に示す場合は,すでに割り当てられているセグメントに空きページがあっても,新規にセグメントが確保されて割り当てられます。
-
バックグラウンドインポートを実行する場合
-
複数のチャンクをマージする場合
-
チャンクの状態変更でカレントチャンクが切り替わり,新規にチャンクが作成される場合
-
システム表の再編成を実行する場合
-
更新行のカラム化機能によって,HADBがローストア形式のデータをカラムストア形式のデータに変換する場合
-
- セグメントが解放されるタイミング
-
割り当てられたセグメントは,次のタイミングで解放されます。
-
実表およびインデクスを削除したとき
-
実表の行データをすべて削除したとき(TRUNCATE TABLE文を実行したとき)
-
既存データをすべて削除する指定をして,実表にデータをインポートしたとき
-
チャンクを削除したとき
-
インデクスを再作成したとき
-
複数のチャンクをマージ後に,マージ元チャンクのインデクスのデータを削除したとき
-
チャンクをアーカイブ状態にしたとき
-
アーカイブマルチチャンク表から,レギュラーマルチチャンク表に変更したとき(ALTER TABLE文を実行したとき)
-
システム表の再編成を実行したとき
-
(2) ページ
ページは,ディスクI/O時の最小単位になります。ディスク上のデータを読み込むときや,ディスク上にデータを書き込むときは,ページ単位で実行されます。
(a) ページの種類
ページは,格納するデータの種類によって次のように分類されます。ページの種類を次の表に示します。
項番 |
ページの種類 |
説明 |
||
---|---|---|---|---|
1 |
データページ(ローストア形式の場合) |
基本行用ページ |
表データの基本行を格納するページです。 |
|
2 |
分岐行用ページ |
表データの分岐行を格納するページです。 |
||
3 |
データページ(カラムストア形式の場合) |
エントリページ |
カラムストア形式で格納した表データに関する管理情報を格納するページです。このページは,カラムデータ用セグメント内に確保されます。 |
|
4 |
辞書ページ |
圧縮方式に辞書圧縮(DICTIONARY)を選択した場合の,辞書データを格納するページです。このページは,カラムデータ用セグメント内に確保されます。 |
||
5 |
列データページ |
カラムストア形式で格納した各列のデータ(分岐行のデータを除く)を格納するページです。このページは,カラムデータ用セグメント内に確保されます。 |
||
6 |
基本行用ページ |
カラムストア表にINSERT文で追加したデータを,基本行として格納するページです。 また,カラムストア形式で格納したデータに対してUPDATE文を実行した場合に,更新データを基本行として格納するページです。 このページは,ローデータ用セグメント内に確保されます。 |
||
7 |
分岐行用ページ |
カラムストア形式で格納した行のデータの分岐行を格納するページです。このページは,ローデータ用セグメント内に確保されます。 実長が128バイト以上の列データは,分岐行としてこのページに格納されます。 |
||
8 |
無効情報管理用ページ |
カラムストア形式で格納したデータに対して,UPDATE文やDELETE文を実行した場合に,対象のデータが無効となったことを示す情報を管理するページです。 このページは,ローデータ用セグメント内に確保されます。 |
||
9 |
割り当て管理用ページ |
ローデータ用セグメントの先頭に存在し,ローデータ用セグメント内のページの割り当てを管理しています。 |
||
10 |
B-treeインデクスのインデクスページ※1 |
上位ページ |
ルートページ |
ルートページとは,B-tree構造中の最上位のインデクスページのことです。 |
11 |
中間ページ |
中間のB-treeインデクスページです。 |
||
12 |
リーフページ |
最下位のB-treeインデクスページです。 |
||
13 |
行IDディレクトリページ |
行IDリストページを管理するページです。 |
||
14 |
行IDリストページ |
同じキー値が256個以上重複した場合の,そのキー値専用のリーフページです。 |
||
15 |
テキストインデクスのインデクスページ |
文字列管理部ページ |
テキストインデクス化された文字列の種類を管理するページです。 |
|
16 |
出現情報管理部ページ |
テキストインデクス化された文字列の出現情報をページ単位で管理するページです。 |
||
17 |
レンジインデクスのインデクスページ |
DBエリアファイル管理部ページ |
レンジインデクスを定義した表の値域が,どのDBエリアファイルの値域かを管理するページです。 また,レンジインデクスを定義した表のチャンクの値域を格納するページです。 |
|
18 |
セグメント管理部ページ |
レンジインデクスを定義した表の値域が,どのセグメントの値域かを管理するページです。 |
||
19 |
値域情報部ページ |
レンジインデクスを定義した表が格納されているセグメントの値域を格納するページです。 |
||
20 |
作業表用ページ※2 |
作業表用DBエリアのページです。作業表用DBエリアのページサイズは32キロバイトを超えることができます。また,分岐行を格納するページはありません。 |
||
21 |
ディレクトリページ※3 |
DBエリアに関する管理情報を格納するページです。 |
- 注※1
-
B-treeインデクスとインデクスページの関係を次の図に示します。
- 注※2
-
作業表用ページは,作業表を作成するSQLを実行したときに確保されます。
- 注※3
-
ディレクトリページは,DBエリアを作成するときに一定数確保されます。そのあとは,データページやインデクスページが一定量に達するごとに,新たなページが確保されます。
- ■基本行および分岐行とは
-
ローストア形式の場合,1行のデータは同一ページに格納されますが,定義長が255バイトを超える可変長列がある場合,1行のデータが別ページに分割されて格納されることがあります。別ページに格納された行を分岐行といい,分岐先の情報を持つ行を基本行といいます。これは,ローストア表のデータの場合も,カラムストア表に更新系SQLで追加したデータの場合も同じです。
なお,ローストア表の場合,可変長列データが別ページに分割されて格納されるかどうかについては,表定義時(CREATE TABLE文実行時)に指定できます。
- ■ディレクトリページ群の存在とディレクトリページの配置
-
DBエリアファイルの先頭部分には,次に示す情報を管理するディレクトリページ群が存在します。
-
DBエリアの定義情報
-
定義された表およびインデクスの情報
-
チャンクの情報
DBエリアを構成する先頭のDBエリアファイルの場合は,ディレクトリページ群に,DBエリアの情報を管理するディレクトリページも含まれます。そのため,ディレクトリページの配置が,先頭のDBエリアファイルと2番目以降のDBエリアファイルでは異なります。
また,表およびインデクスを格納するセグメントは,ディレクトリページ群の後ろに配置されます。また,一定間隔でセグメントの情報を管理するディレクトリページが配置されます。そのため,DBエリアファイルのすべての領域が,表およびインデクスを格納するセグメントに使用されるわけではありません。
DBエリアファイル内のディレクトリページの配置例を,次の図に示します。
図2‒17 DBエリアファイル内のディレクトリページの配置例 -
(b) ページが割り当てられるタイミング,解放されるタイミング
- ページが割り当てられるタイミング
-
データページ,およびインデクスページが割り当てられるタイミングを次に示します。
-
ローストア表に行を追加したとき,および行を更新したとき
基本行用ページ,および分岐行用ページは,表に行を追加したとき,および行を更新したときに割り当てられます。CREATE TABLE文を実行してローストア表を定義したときには割り当てられません。行の追加を繰り返して,すでに割り当てられたページが満杯になった場合は,新規にページが確保されて割り当てられます。
レンジインデクスのインデクスページは,表に行を追加したとき,および行を更新したときに割り当てられます。
-
カラムストア表に行を追加したとき,および行を更新したとき
-
エントリページ,辞書ページ,および列データページは,adbimportコマンドを実行してカラムストア表に行を追加したときに割り当てられます。
基本行用ページは,更新系SQLを実行してカラムストア表に行を追加したとき,または行を更新したときに割り当てられます。
分岐行用ページは,adbimportコマンドまたは更新系SQLを実行して,カラムストア表に行を追加したとき,または行を更新したときに割り当てられます。
エントリページ,辞書ページ,列データページ,基本行用ページ,および分岐行用ページは,CREATE TABLE文でカラムストア表を定義したときには割り当てられません。行の追加を繰り返し,割り当て済みページが満杯になったときに,新規ページが確保されて割り当てられます。
-
無効情報管理用ページは,カラムストア形式のデータを削除したとき,またはデータを更新したときに割り当てられます。無効情報管理用ページは,CREATE TABLE文でカラムストア表を定義したときには割り当てられません。行の削除や行の更新を繰り返して,すでに割り当てられたページが満杯になったときに,新規にページが確保されて割り当てられます。
なお,更新系SQLによって追加・更新されたローストア形式のデータを削除したり,更新したりしたときには,無効情報管理用ページは割り当てられません。
-
レンジインデクスのインデクスページは,表に行を追加したとき,および行を更新したときに割り当てられます。
-
-
更新行のカラム化機能によって,HADBがローストア形式のデータをカラムストア形式のデータに変換したとき
カラムストア表内のローストア形式のデータをカラムストア形式のデータに変換したときに,新規にページが確保されて割り当てられます。
-
B-treeインデクスを定義したとき
CREATE INDEX文を実行してB-treeインデクスを定義したときに,上位ページと,リーフページが1つずつ割り当てられます。
-
B-treeインデクスのインデクスページスプリットが発生したとき
B-treeインデクスのインデクスページスプリットが発生するたびに,新規のインデクスページが確保されて,割り当てられます。B-treeインデクスのインデクスページスプリットについては,「5.3.4 B-treeインデクスのインデクスページ内の未使用領域の確保(PCTFREE)」の「(2) B-treeインデクスのインデクスページスプリット」を参照してください。
-
テキストインデクスを定義したとき
CREATE INDEX文を実行してテキストインデクスを定義したときに,文字列管理部ページと,出現情報管理部ページが2つずつ割り当てられます。
-
テキストインデクスのインデクスページスプリットが発生したとき
テキストインデクスのインデクスページスプリットが発生するたびに,新規のインデクスページが確保されて,割り当てられます。テキストインデクスのインデクスページスプリットについては,「5.4.2 テキストインデクスのインデクスページ内の未使用領域の確保(PCTFREE)」の「(2) テキストインデクスのインデクスページスプリット」を参照してください。
-
レンジインデクスを定義したとき
CREATE INDEX文を実行してレンジインデクスを定義したときに,1セグメント分のDBエリアファイル管理部ページが割り当てられます。
-
- ページが解放されるタイミング
-
セグメントが解放されたときに,セグメント内のすべてのページが解放されます。
(c) ページグループ
レンジインデクスの値域情報部用のセグメントからページを割り当てる場合,HADBは複数のページをまとめて確保します。このとき,まとめて割り当てられるページの単位をページグループといいます。また,ページグループを構成するページ数をページグループサイズといいます。
ページグループサイズを求める場合は,「5.8.6 レンジインデクスを格納するセグメント数の求め方」の「(1) 変数SGRIの求め方」の変数PGGRPSIZEを参照してください。
レンジインデクスのページグループサイズを確認する場合は,「10.9.5 レンジインデクスの状態や使用量を確認したい場合」を参照してください。