Hitachi

Hitachi Advanced Data Binder システム構築・運用ガイド


2.2.3 DBエリアの構造

DBエリアは,セグメントおよびページという単位で構成されます。1つのDBエリアは,複数のセグメントから構成されます。また,1つのセグメントは複数のページから構成されます。DBエリアの構造を次の図に示します。

図2‒13 DBエリアの構造

[図データ]

〈この項の構成〉

(1) セグメント

セグメントは,表およびインデクスを格納するときの最小単位です。1つのセグメントには,1つの表または1つのインデクスが格納されます。セグメントと,表およびインデクスの関係を次の図に示します。

図2‒14 セグメントと,表およびインデクスの関係

[図データ]

なお,1つのセグメントに複数の表,または複数のインデクスは格納されません。セグメントに,表およびインデクスが格納されない例を次の図に示します。

図2‒15 セグメントに,表およびインデクスが格納されない例

[図データ]

(a) セグメントの種類

セグメントは,セグメントに割り当てられるページの種類によって次のように分類されます。セグメントの種類を次の表に示します。ページの種類については,「2.2.3(2)(a) ページの種類」を参照してください。

表2‒4 セグメントの種類

項番

セグメントの種類

説明

1

基本行用セグメント

基本行を格納するページ(基本行用ページ)を割り当てるセグメントです。

2

分岐行用セグメント

分岐行を格納するページ(分岐行用ページ)を割り当てるセグメントです。

3

B-treeインデクス

上位ページ用のセグメント

B-treeインデクスのルートページ,および中間ページを割り当てるセグメントです。

4

下位ページ用のセグメント

B-treeインデクスのリーフページ,行IDディレクトリページおよび行IDリストページを割り当てるセグメントです。

5

テキストインデクス

文字列管理部用のセグメント

テキストインデクスの文字列管理部ページを割り当てるセグメントです。

6

出現情報管理部用のセグメント

テキストインデクスの出現情報管理部ページを割り当てるセグメントです。

7

レンジインデクス

DBエリアファイル管理部用のセグメント

レンジインデクスのDBエリアファイル管理部ページを割り当てるセグメントです。

8

値域情報部用のセグメント

レンジインデクスのセグメント管理部ページ,および値域情報部ページを割り当てるセグメントです。

(b) セグメントが割り当てられるタイミング解放されるタイミング

セグメントが割り当てられるタイミング

セグメントは,新規にページを確保したときに割り当てられます。すでに割り当てられているセグメントに,空きページがない場合は,新規にセグメントが確保されて割り当てられます。

ただし,次に示す場合は,すでに割り当てられているセグメントに空きページがあっても,新規にセグメントが確保されて割り当てられます。

  • バックグラウンドインポートを実行する場合

  • 複数のチャンクをマージする場合

  • チャンクの状態変更でカレントチャンクが切り替わり,新規にチャンクが作成される場合

セグメントが解放されるタイミング

割り当てられたセグメントは,次のタイミングで解放されます。

  • 実表およびインデクスを削除したとき

  • 実表の行データをすべて削除したとき(TRUNCATE TABLE文を実行したとき)

  • 既存データをすべて削除する指定をして,実表にデータをインポートしたとき

  • チャンクを削除したとき

  • インデクスを再作成したとき

  • 複数のチャンクをマージ後に,マージ元チャンクのインデクスのデータを削除したとき

  • チャンクをアーカイブ状態にしたとき

  • アーカイブマルチチャンク表から,レギュラーマルチチャンク表に変更したとき(ALTER TABLE文を実行したとき)

(2) ページ

ページは,ディスクI/O時の最小単位になります。ディスク上のデータを読み込むときや,ディスク上にデータを書き込むときは,ページ単位で実行されます。

(a) ページの種類

ページは,格納するデータの種類によって次のように分類されます。ページの種類を次の表に示します。

表2‒5 ページの種類

項番

ページの種類

説明

1

データページ

基本行用ページ

表データの基本行を格納するページです。

2

分岐行用ページ

表データの分岐行を格納するページです。

3

B-treeインデクスのインデクスページ※1

上位ページ

ルートページ

ルートページとは,B-tree構造中の最上位のインデクスページのことです。

4

中間ページ

中間のB-treeインデクスページです。

5

リーフページ

最下位のB-treeインデクスページです。

6

行IDディレクトリページ

行IDリストページを管理するページです。

7

行IDリストページ

同じキー値が256個以上重複した場合の,そのキー値専用のリーフページです。

8

テキストインデクスのインデクスページ

文字列管理部ページ

テキストインデクス化された文字列の種類を管理するページです。

9

出現情報管理部ページ

テキストインデクス化された文字列の出現情報をページ単位で管理するページです。

10

レンジインデクスのインデクスページ

DBエリアファイル管理部ページ

レンジインデクスを定義した表の値域が,どのDBエリアファイルの値域かを管理するページです。

また,レンジインデクスを定義した表のチャンクの値域を格納するページです。

11

セグメント管理部ページ

レンジインデクスを定義した表の値域が,どのセグメントの値域かを管理するページです。

12

値域情報部ページ

レンジインデクスを定義した表が格納されているセグメントの値域を格納するページです。

13

作業表用ページ※2

作業表用DBエリアのページです。作業表用DBエリアのページサイズは32キロバイトを超えることができます。また,分岐行を格納するページはありません。

14

ディレクトリページ※3

DBエリアに関する管理情報を格納するページです。

注※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 レンジインデクスの状態や使用量を確認したい場合」を参照してください。