2.14.2 データインポート単位のデータ管理(チャンク)
HADBは,バックグラウンドインポートを実現するために,1回のバックグラウンドインポートで実表に格納したデータを,1つの固まりとして管理します。この固まりを,チャンクといいます。
(1) チャンクの概要
HADBは,複数のチャンクを管理することができ,各チャンクには実表内で一意となる番号が付与されます。この番号を,チャンクIDといいます。
バックグラウンドインポートを実行するたびに,チャンクが新規に作成されます。作成されたチャンクのうち,データが追加されるチャンクをカレントチャンクといいます。カレントチャンクは実表内に1つだけ存在します。
バックグラウンドインポートの実行などで,新たなチャンクが作成されると,カレントチャンクは変更されます(データが追加されるチャンクが変わります)。カレントチャンクが変更されることを,カレントチャンクの切り替えといいます。
バックグラウンドインポートとカレントチャンクの関係を次の図に示します。
- [説明]
-
実表として表T1を新規に定義すると,カレントチャンクとして空のチャンク(チャンク1)が作成されます。
表T1に対して1回目のデータインポートを実行すると,データが格納されます。格納されたデータの固まりは,チャンク1として管理されます。
表T1に対して,2回目のデータインポートをバックグラウンドインポートで実行すると,新たなチャンク(チャンク2)が作成されて,データが格納されます。格納されたデータの固まりは,チャンク2として管理されます。このとき,カレントチャンクは,チャンク1からチャンク2に変更されます。
- メモ
-
- ■カレントチャンクの切り替えが発生するタイミング
-
次に示す場合に,カレントチャンクが変更されます。
・バックグラウンドインポートを実行した場合
・カレントチャンクを含む複数のチャンクをマージした場合
また,次に示す場合に,カレントチャンクが変更されることがあります。
・チャンクの状態を変更した場合
- ■行の挿入や更新と,チャンクの関係
-
バックグラウンドインポートでデータを格納した実表に対して,INSERT文で行を挿入すると,挿入した行はカレントチャンクに格納されます。一方,UPDATE文で行を更新すると,更新後の行は更新対象の行があるチャンクに格納されます。
- ■インデクスが定義されている場合のチャンクの作成とチャンクID
-
データインポート対象の実表にインデクスが定義されている場合,バックグラウンドインポート時に作成されるインデクスのデータも,チャンク単位に管理されます。
例えば,データインポート対象の実表にインデクス(B-treeインデクス,テキストインデクスおよびレンジインデクス)が定義されている場合,実表のデータだけでなく,バックグラウンドインポート時に作成されるインデクスのデータ(B-treeインデクスのデータ,テキストインデクスのデータおよびレンジインデクスのデータ)についても,それぞれチャンクが作成されます。
HADBでは,バックグラウンドインポートした単位でチャンクを管理します。そのため,上記のチャンクに同一のチャンクIDが付与されます。
インデクスが定義されている場合のチャンクとチャンクIDの概要を次の図に示します。
図2‒44 インデクスが定義されている場合のチャンクの作成とチャンクIDの概要 - ■作成されるチャンクの数とインデクス数の関係
-
データインポート対象の実表にインデクスを定義している場合,1回のバックグラウンドインポートで作成されるチャンクの数は,インポート対象の実表,および実表に定義されたインデクスの数の合計になります。
例えば,実表にB-treeインデクスを2つ,テキストインデクスを1つ,およびレンジインデクスを1つ定義している場合,1回のバックグラウンドインポートで作成されるチャンク数は5個になります。
HADBでは,1つのDBエリア,および1つの実表で管理できるチャンク数には上限があります。1DBエリア中のチャンク数,および1つの実表に作成できるチャンク数の上限については,「付録D.1 システム構成に関する最大値と最小値」を参照してください。
- ■チャンクと,DBエリアの関係
-
表とインデクスを同じDBエリアに格納しても,別々のDBエリアに格納しても,バックグラウンドインポートは実行できます。どちらの場合でも,実表,およびインデクスごとにチャンクが作成されて,1つのチャンクIDが付与されます。チャンクとDBエリアの関係を,次の図に示します。
図2‒45 チャンクとDBエリアの関係
(2) チャンクのマージ
バックグラウンドインポートを実行して作成された複数のチャンクは,1つの新規のチャンクにマージできます。チャンクをマージすると,使用しているチャンク数を減らすことができます。
なお,マージ対象のチャンクに対して検索を実行しているユーザが存在しても,チャンクをマージできます。
- 重要
-
- ■チャンクのマージと,B-treeインデクスやテキストインデクスを使用した検索性能の関係
-
バックグラウンドインポートを繰り返すことによってチャンク数が増加すると,B-treeインデクスやテキストインデクスを使用した検索時に性能が低下するおそれがあります。チャンクをマージしてチャンク数を減らすと,検索性能の低下を回避できます。
- ■チャンクのマージと,作成できるチャンク数の関係
-
HADBでは,1つのDBエリア,および1つの実表で管理できるチャンク数に上限があります。チャンクをマージしてチャンク数を減らすと,この上限に達することを回避できます。1DBエリア中のチャンク数,および1つの実表に作成できるチャンク数の上限については,「付録D.1 システム構成に関する最大値と最小値」を参照してください。
複数のチャンクをマージする例を次の図に示します。
- [説明]
-
カレントチャンクを含む3つのチャンク(チャンク1からチャンク3まで)をマージします。マージすると,3つのチャンクは,1つの新規のチャンク(チャンク4)として管理されます。このとき,カレントチャンクは,チャンク3からチャンク4に変更されます。
- メモ
-
マージ対象のチャンクに,カレントチャンクを含まない場合は,カレントチャンクは変更されません。
(3) チャンクの削除
実表に格納されたデータは,チャンク単位で削除できます。チャンクを削除すると,行の削除とは異なり,データの格納領域を再利用できます。ただし,カレントチャンクは削除できません。
チャンクの削除と格納領域の再利用の例について次の図に示します。
- [説明]
-
チャンク1を削除した場合,チャンク1が使用していた領域を再利用できます。チャンク1の削除後に,表T1に対してバックグラウンドインポートを実行すると,チャンク1が使用していた領域に対して,新たなチャンク(チャンク4)が作成されてデータが格納されます。
(4) チャンクの状態変更
チャンクには,幾つかの状態があります。
バックグラウンドインポートを実行するときに,作成されるチャンクの状態を指定できます。チャンクの状態はバックグラウンドインポート後に変更することもできます。
HADBサーバが管理するチャンクの状態を次に示します。
項番 |
チャンクの状態 |
説明 |
---|---|---|
1 |
通常状態 |
通常状態のチャンクとは,チャンクに含まれるデータが操作系SQLの対象となるチャンクのことです。そのため,通常状態のチャンクに含まれるデータは検索できます。 通常状態のチャンクは,バックグラウンドインポートを実行すると作成されます。 また,通常状態のチャンクは,待機状態のチャンクに変更できます。 |
2 |
待機状態 |
待機状態のチャンクとは,チャンクに含まれるデータが操作系SQLの対象外となるチャンクのことです。そのため,待機状態のチャンクに含まれるデータは検索できません。ただし,PURGE CHUNK文とTRUNCATE TABLE文によるチャンクの削除はできます。 待機状態のチャンクは,バックグラウンドインポートを実行するときに,作成されるチャンクの状態を指定することで作成されます。 また,待機状態のチャンクは,通常状態のチャンクに変更できます。 なお,待機状態のチャンクは,カレントチャンクにはなりません。 待機状態のチャンクを利用すると,次のような運用ができます。
|
3 |
削除仕掛中 |
削除仕掛中のチャンクとは,チャンクに含まれるデータが操作系SQLの対象外となるチャンクのことです。そのため,削除仕掛中のチャンクに含まれるデータは検索できません。ただし,PURGE CHUNK文とTRUNCATE TABLE文によるチャンクの削除はできます。 削除仕掛中のチャンクは,チャンクのマージ処理が中断した場合に,削除されないで残ってしまった不要なチャンク(マージ元チャンク)のことです。 また,削除仕掛中のチャンクは,状態を変更できません。 待機状態のチャンクとは異なり,削除仕掛中のチャンクは不要であるため,手動で削除する必要があります。 |
- 注
-
チャンクの状態によって,チャンクに含まれるデータに対して,実行できるSQL文とコマンドが異なります。詳細については,「11.4.12 チャンクの状態を変更する方法」の「(2) チャンクの状態と実行できるSQL文・コマンドの関係」を参照してください。
バックグラウンドインポートで作成された複数のチャンクの状態を変更する例を,次の図に示します。
- [説明]
-
通常状態のチャンク(チャンク1と2)を,待機状態のチャンクに変更します。待機状態のチャンクに変更すると,チャンク1と2に格納されているデータは検索できなくなります。
また,待機状態のチャンク(チャンク3)を,通常状態のチャンクに変更します。通常状態のチャンクに変更すると,チャンク3に格納されているデータを検索できるようになります。