5.2.4 マルチチャンク表を定義する場合の考慮点
ここでは,実表をマルチチャンク表として定義する場合の考慮点について説明します。
ここをお読みいただいたあとに,「5.6.2 データ用DBエリアにマルチチャンク表を格納する場合の考慮点」の説明もお読みください。
また,実表をアーカイブマルチチャンク表として定義する場合は,ここをお読みいただいたあとに,「5.2.5 アーカイブマルチチャンク表を定義する場合の考慮点【ローストア表】」の説明もお読みください。
- 〈この項の構成〉
(1) 実表をマルチチャンク表として定義する場合のメリット
実表をマルチチャンク表として定義した場合,次に示す運用ができます。
-
データの検索とデータのインポートを同時に実行できます(バックグラウンドインポート機能を使用できます)。
-
PURGE CHUNK文で,チャンク単位にデータを一括削除できます。
-
データを検索できない状態で事前にインポートだけしておき,任意のタイミングでインポートしたデータを検索することができます。運用例については,「11.4.24 バックグラウンドインポートとチャンクを意識した運用例2(待機状態のチャンクを利用した運用)」を参照してください。
- メモ
-
4メガバイト以下の少量のデータだけを頻繁に格納する場合は,バックグラウンドインポート機能ではなく,操作系SQLのINSERT文を使用することを検討してください。バックグラウンドインポートで少量のデータを頻繁に格納すると,むだな領域が発生してしまい,データの格納効率が悪くなります。バックグラウンドインポートを実行すると,すでに割り当てられているセグメントに空きがあっても,新規にセグメントが確保されて割り当てられるためです。
実表をカラムストア表として定義し,そのカラムストア表に対してINSERT文,UPDATE文,およびDELETE文を実行する可能性が高い場合は,カラムストア表かつマルチチャンク表として実表を定義してください。カラムストア表に対してINSERT文,UPDATE文,およびDELETE文を繰り返し実行すると,表の再編成が必要になることがあります。その際,マルチチャンク表であれば,チャンク単位で再編成が実行できるため,次のメリットがあります。
-
再編成に掛かる時間を短縮できる
-
再編成時に必要となるディスク容量を抑えることができる
また,実表をアーカイブマルチチャンク表として定義すると,チャンクアーカイブ機能も使用することができます。実表をアーカイブマルチチャンク表として定義する場合は,「5.2.5 アーカイブマルチチャンク表を定義する場合の考慮点【ローストア表】」の説明もお読みください。
(2) 実表をマルチチャンク表として定義する場合のデメリット
-
マルチチャンク表には,主キーおよびユニークインデクスを定義できません。
-
チャンクの管理,運用が必要になります。例えば,チャンクのマージを定期的にする必要があります。詳細については,「11.4.9 チャンクをマージする方法(チャンク数を減らす方法)」を参照してください。
(3) CREATE TABLE文で必要な指定(チャンク数の最大値)
実表をマルチチャンク表として定義する場合は,CREATE TABLE文のチャンク指定でチャンク数の最大値を指定してください。
(4) チャンク数の最大値の求め方
adbimportコマンドでバックグラウンドインポートを実行するたびに,チャンクが作成されます。また,adbmergechunkコマンドで,作成された複数のチャンクをマージできます。ただし,CREATE TABLE文のチャンク指定で指定したチャンク数の最大値以上のチャンクは作成できません。
そのため,次の3点を踏まえて,チャンク数の最大値を見積もってください。
-
adbimportコマンドでバックグラウンドインポートを実行する頻度
-
adbmergechunkコマンドでチャンクをマージする頻度
-
チャンクを保持する期間
なお,作成したチャンクはPURGE CHUNK文で削除できます。削除したチャンクの数だけ,チャンクを作成できます。また,CREATE TABLE文で指定したチャンク数の最大値は,ALTER TABLE文で変更できます。
変数CHUNK_NUMの値を,次の計算式で求めてください。計算式で求めた値以上の値を,CREATE TABLE文のチャンク数の最大値に指定します。
- 計算式(単位:個数)
-
CHUNK_NUM = ↑years×↑(import_num÷merge_source_chunk_num)↑×safe_rate↑ +(↑merge_source_chunk_num×safe_rate↑)※
注※:adbmergechunkコマンド実行時にマージ元チャンクが削除仕掛中のチャンクとして残るおそれがあるため,それを考慮して多めに見積もります。
- 重要
-
adbmergechunkコマンドの実行時に,マージ元チャンクが削除されなかった場合,マージ元チャンクは削除仕掛中のチャンクとして残ります。その結果,削除仕掛中のチャンクの数だけ,使用できるチャンク数が減ります。そのため,変数CHUNK_NUMの値を求める際は,削除仕掛中のチャンクの数も考慮する必要があります。削除仕掛中のチャンクについては,「11.4.9 チャンクをマージする方法(チャンク数を減らす方法)」の「(3) adbmergechunkコマンドによるチャンクのマージ」を参照してください。
変数の説明
- years
-
チャンク(実表に格納したデータ)を保持する年数です。
adbimportコマンドでバックグラウンドインポートを実行して作成されたチャンクを,PURGE CHUNK文で削除するまでの年数を代入してください。
- import_num
-
1年間にadbimportコマンドでバックグラウンドインポートを実行する回数を代入してください。
- merge_source_chunk_num
-
adbmergechunkコマンドを実行するときに存在するマージ元チャンクの数です。
例えば,1日1回adbimportコマンドでバックグラウンドインポートを実行して,5日に1回adbmergechunkコマンドでチャンクをマージする場合は,5を代入してください。
- safe_rate
-
安全率です。1.2を代入してください。
変数CHUNK_NUMの求め方の例を次に示します。
- ■変数CHUNK_NUMの求め方の例
-
次の条件で,変数CHUNK_NUMを計算します。
-
チャンク(実表に格納したデータ)を2年間保持する
-
週に1回,adbimportコマンドでバックグラウンドインポートを実行する
-
月に1回,adbmergechunkコマンドで4つのチャンクをマージする
-
安全率を1.2とする
計算式(単位:個数)
この例の場合,変数CHUNK_NUMの値は39となります。そのため,チャンク数の最大値には39以上の値を指定してください。
-