2 XDB のアーキテクチャ
2.2 表およびインデクスの格納領域(DB エリ ア)
ここでは,表およびインデクスを格納する論理的な領域(DBエリア)について説明しま す。
2.2.1 DB エリアとは
XDB
には,表およびインデクスを格納する論理的な領域があります。この領域をDB
エ リアといいます。一つのDB
エリアには,複数の表またはインデクスを格納できます。ただし,次に示すような形で表およびインデクスを格納することはできません。
• 表とインデクスを同じ
DB
エリアに格納できません。• 一つの表または一つのインデクスを複数の
DB
エリアにわたって格納できません。DB
エリアと表,インデクスの関係を次の図に示します。図
2-1 DB
エリアと表,インデクスの関係2.2.2 DB エリアの種類
DB
エリアには幾つかの種類があり,用途ごとに各DB
エリアを使い分ける必要がありま す。DBエリアの種類を次の表に示します。表
2-1 DB
エリアの種類項番 DBエリアの種類 説明
1 表用DBエリア 表を格納するDBエリアです。
2 インデクス用DBエリ ア
インデクスを格納するDBエリアです。
XDB
のユーザは,作成する表やインデクス,および実行するSQL
を考慮して,DBエリ アを設計し,作成する必要があります。DBエリアの設計については,「3.4 DBエリア の設計」を参照してください。なお,マスタディレクトリ用
DB
エリアとディクショナリ用DB
エリアは,XDBの開始 時に自動的に作成されるため,XDBのユーザがこれらのDB
エリアを作成する必要はあ りません。2.2.3 DB エリアの物理構造
DB
エリアは,ページとセグメントという単位から構成されています。DBエリアの物理 構造を次の図に示します。図
2-2 DB
エリアの物理構造このように
DB
エリアは複数のセグメントから構成されています。セグメントは複数の ページから構成されています。3 作業表用DBエリア SQLの実行時にXDBが作成する作業表を格納するDBエリアです。
作業表については,「4.3.4 作業表を作成するSQL」を参照してく ださい。
4 マスタディレクトリ用 DBエリア
システムの内部情報を格納するDBエリアです。
5 ディクショナリ用DB エリア
ディクショナリ表およびディクショナリ表のインデクスを格納する DBエリアです。
ディクショナリ表については,「付録A ディクショナリ表」を参照 してください。
項番 DBエリアの種類 説明
つのセグメントに複数の表,または複数のインデクスを格納することはできません。セ グメントと表,インデクスの関係を次の図に示します。
図
2-3 セグメントと表,インデクスの関係
参考
作業表用DBエリアは,ほかのDBエリアと構造が異なり,セグメント単位ではなくページ 単位に管理されます。
なお,セグメントには次の表に示す種類があります。
表
2-2 セグメントの種類
項番 セグメントの種類 説明 該当するDBエリアの種類 1 表 基本行用セグ
メント
基本行用ページ※を割り当て るセグメントです。
• 表用DBエリア
• ディクショナリ用DBエリア
2 インデ
クス
上位ページ用 セグメント
上位ページを割り当てるセグ メントです。
• インデクス用DBエリア
• ディクショナリ用DBエリア
3 下位ページ用
セグメント
リーフページ,または行ID リストページを割り当てるセ グメントです。
注※
基本行を格納するページを基本行用ページといい,分岐行を格納するページを分岐 行用ページといいます。
■基本行とは
通常,1行のデータは同一ページに格納されますが,可変長のデータ型などを使用 しているときは,1行のデータサイズが
1
ページのサイズより大きくなることがあ ります。この場合,複数のページにデータを分割して格納します。このとき,別 ページに格納された行を分岐行といい,その分岐先の情報を格納する行を基本行と いいます。XDB
では,ユーザが作成する表の列のデータ型に,可変長のデータ型をサポートし ていないため,ユーザが作成する表では分岐行が発生することはありません。した がって,マニュアル中では,基本行は行と読み替えてください。分岐行についての 説明は参考情報としてお読みください。なお,ディクショナリ表では可変長のデータ型(VARCHAR)をサポートしている ため,分岐行が発生することがあります。
参考
■セグメントが確保されるタイミング
表用DBエリアのセグメントは,表に行が挿入されたときに確保されます。表の定義時
(CREATE TABLE文の実行時)には確保されません。行の追加が繰り返されて,確保済み セグメントに空きページがなくなった場合に,新規セグメントが確保されます。
インデクス用DBエリアのセグメントは,インデクスの定義時(CREATE INDEX文の実行 時)に,上位ページ用セグメントと下位ページ用セグメントが一つずつ確保されます。その あとは,表の場合と同様に,インデクスキーの増加に伴い,必要に応じてセグメントが確保 されます。
■セグメントが解放されるタイミング
確保されたセグメントは次に示すタイミングで解放されます。
• eexdbimportコマンドで表データをインポートしたとき(作成モードを指定した場合に限 ります)