Hitachi

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


10.4.10 チャンクをマージする方法(チャンク数を減らす方法)

バックグラウンドインポートを繰り返してチャンク数が増加すると,B-treeインデクスやテキストインデクスを使用した検索時に性能が低下するおそれがあります。インデクスがチャンクごとに分割されると,インデクスのデータの総容量が増え,I/O回数がチャンク数に比例して増加するためです。

そのため,チャンク数が増えた場合は,adbmergechunkコマンドでチャンクをマージして,チャンク数を減らすことを検討してください。

〈この項の構成〉

(1) チャンクの状態に関する留意事項

次に示すチャンクをマージできます(状態が同じである複数のチャンクをマージできます)。

レギュラーマルチチャンク表の場合
  • 複数の通常状態のチャンクを,1つの通常状態のチャンクにマージできます。

  • 複数の待機状態のチャンクを,1つの待機状態のチャンクにマージできます。

アーカイブマルチチャンク表の場合
  • 通常状態でアーカイブ状態ではない複数のチャンクを,通常状態でアーカイブ状態ではない1つのチャンクにマージできます。

  • 通常状態でアーカイブ状態の複数のチャンクを,通常状態でアーカイブ状態の1つのチャンクにマージできます。

  • 待機状態でアーカイブ状態ではない複数のチャンクを,待機状態でアーカイブ状態ではない1つのチャンクにマージできます。

  • 待機状態でアーカイブ状態の複数のチャンクを,待機状態でアーカイブ状態の1つのチャンクにマージできます。

ポイント
  • 通常状態のチャンクと待機状態のチャンクを,マージすることはできません。

  • アーカイブ状態ではないチャンクとアーカイブ状態のチャンクを,マージすることはできません。

(2) adbmergechunkコマンドによるチャンクのマージ

adbmergechunkコマンドを使用してチャンクをマージする例を次に示します。

adbmergechunkコマンドについては,マニュアル「HADB コマンドリファレンス」の「adbmergechunk(チャンクのマージ)」を参照してください。

■チャンクのマージの実行例

HADBユーザ(ADBUSER01)が,店舗表(SHOPSLIST)の2つのチャンク(チャンクIDが1および2)をマージします。

adbmergechunk -u ADBUSER01 -p '#HelloHADB_01' -g 2
              -w /home/adbmanager/tmp
              -z /home/adbmanager/merge_file/merge_opt_file01.txt
              -m 'January 2014'
              -c 1,2
              SHOPSLIST
図10‒5 マージチャンク処理の例

[図データ]

[説明]

adbmergechunkコマンドを実行すると,マージ元チャンクである2つのチャンク(チャンクIDが1および2)が,1つのチャンク(チャンクIDが4)にマージされます。マージが完了すると,マージ元チャンクは削除されます。

参考
削除仕掛中のチャンク

実行中のadbmergechunkコマンドが,マージ先チャンクの完成からマージ元チャンクの削除完了までの間に中断した場合,マージ元チャンクの状態は「削除仕掛中」となり,マージ元チャンクは削除されないで残ります。

「削除仕掛中」となったマージ元チャンクは手動で削除する必要があります。

手動でマージ元チャンクを削除する場合は,「付録C.7(12) 削除仕掛中のチャンクを調べる場合」を参照してマージ元チャンクのチャンクIDを調べ,PURGE CHUNK文で削除してください。

なお,PURGE CHUNK文のWHERE句に条件(IN述語,限定述語)を指定して,「削除仕掛中」のチャンクを一括して削除することができます。PURGE CHUNK文の指定方法の例については,マニュアル「HADB SQLリファレンス」の「PURGE CHUNK(チャンク内の全行削除)」の「PURGE CHUNK文の指定形式および規則」の「例題」を参照してください。

チャンクのマージに伴うインデクスのデータ量の一時的な増加

adbmergechunkコマンドの実行中は,マージ元チャンクのインデクスのデータ,およびマージ先チャンクのインデクスのデータの両方が一時的に存在するときがあります。そのため,インデクスのデータ量が一時的に増加します。

このとき,実行中のadbmergechunkコマンドを中断し,削除仕掛中のチャンクが残ると,一時的に作成されたインデクスのデータも残るため,削除仕掛中のチャンクを手動で削除する必要があります。

マージ元チャンクの削除と検索処理・更新処理の関係

adbmergechunkコマンドは,マージ先チャンクが完成したタイミングで,マージチャンク対象の表に対する検索処理(SQL文,adbexportコマンドなど)の存在有無を確認します。検索処理が存在した場合は,確認したすべての検索処理の完了を待ってから,マージ元チャンクの削除を行います。そのため,検索処理によっては,マージ元チャンクの削除を行うまでに時間が掛かることがあります。なお,マージ先チャンクが完成したタイミング以降の検索処理については,マージ元チャンクの削除に影響しません。

また,マージ先チャンクの完成後,マージ元チャンクの削除完了を待たないで,マージチャンク対象の表に対して更新処理を行いたい場合は,adbmergechunkコマンドをadbcancelコマンドでキャンセルしてください。キャンセルすると,マージチャンク対象の表を更新できるようになります。

ただし,マージ元チャンクの状態は「削除仕掛中」となり,マージ元チャンクは削除されないで残ります。「削除仕掛中」となったマージ元チャンクは手動で削除してください。

システム用のチャンク

データ用DBエリアには,通常のチャンクとは別にシステム用のチャンクが存在します。システム用のチャンクは,実表やデータ用DBエリアに作成できるチャンクがない状態でもadbmergechunkコマンドを実行できるようにするためのチャンクです。

実表やデータ用DBエリアに作成できるチャンクがない状態でadbmergechunkコマンドを実行した場合,マージ先チャンクとしてシステム用のチャンクが使用されます。そして,マージ元チャンクが削除されたときに,削除されたチャンクの1つがシステム用のチャンクとなります。

(3) adbmergechunkコマンド実行中に検索対象となるチャンク

adbmergechunkコマンドの実行中に,チャンクIDを指定した検索(adbsqlコマンドのサブコマンド#GETDATAなど)を実行した場合,検索対象となるチャンクを次の表に示します。

表10‒2 adbmergechunkコマンド実行中に検索対象となるチャンク

項番

adbmergechunkコマンドの処理状況

検索対象のチャンク

検索の可否

1

コマンド開始からマージ先チャンクの完成前まで

KFAA90000-Iメッセージ(adbmergechunk processing started.)の出力から,KFAA51242-Iメッセージ(A chunk was created.)の出力まで

マージ元チャンク

マージ先チャンク

×

マージ対象外のチャンク

2

マージ先チャンクの完成からマージ元チャンクの削除前まで

KFAA51242-Iメッセージ(A chunk was created.)の出力から,KFAA80243-Iメッセージ(Purge-chunk processing ended.)の出力まで

マージ元チャンク(削除仕掛中)

×

マージ先チャンク

マージ対象外のチャンク

3

マージ元チャンクの削除完了からコマンド終了まで

KFAA80243-Iメッセージ(Purge-chunk processing ended.)の出力から,KFAA90001-Iメッセージ(adbmergechunk processing ended.)の出力まで

マージ元チャンク

×

マージ先チャンク

マージ対象外のチャンク

(凡例)

○:検索できます。

×:検索対象外のため,検索結果は0件となります。

(4) 待機状態のチャンクをマージする場合の注意点

複数の待機状態のチャンク(マージ元チャンク)をマージした場合,マージ先チャンクは待機状態のチャンクとなります。その際,カレントチャンクは変更されません。

また,待機状態のチャンクをマージした場合,マージするチャンクの状態の組み合わせによって,システム表STATUS_CHUNKSにあるチャンクの作成日時,およびカレントチャンクが切り替わった日時に設定される情報が異なります。詳細を次に示します。

参考

システム表STATUS_CHUNKSの詳細については,「付録C.4 STATUS_CHUNKSの内容」を参照してください。

(a) 過去に通常状態になったことがない待機状態のチャンクだけをマージしたとき

過去に通常状態になったことがない待機状態のチャンクだけをマージしたときは,マージ先チャンクに,チャンクの作成日時およびカレントチャンクが切り替わった日時は設定されません。

図10‒6 過去に通常状態になったことがない待機状態のチャンクだけをマージした例

[図データ]

[説明]

過去に通常状態になったことがない待機状態のチャンク(チャンク1と2)をマージすると,マージ先チャンクとして待機状態のチャンク(チャンク4)が作成されます。

その際,カレントチャンクは変更されません。また,チャンク4に,チャンクの作成日時およびカレントチャンクが切り替わった日時は設定されません。

(b) 過去に通常状態になったことがある待機状態のチャンクだけをマージしたとき

過去に通常状態になったことがある待機状態のチャンクだけをマージしたときは,マージ先チャンクに,チャンクの作成日時およびカレントチャンクが切り替わった日時が設定されます。

図10‒7 過去に通常状態になったことがある待機状態のチャンクだけをマージした例

[図データ]

[説明]

過去に通常状態になったことがある待機状態のチャンク(チャンク1と2)をマージすると,マージ先チャンクとして待機状態のチャンク(チャンク4)が作成されます。

その際,カレントチャンクは変更されません。また,チャンク4に,チャンクの作成日時およびカレントチャンクが切り替わった日時が設定されます。

  • チャンクの作成日時に設定される情報

    マージ元チャンクの「チャンクの作成日時」のうち,最も古い日時が設定されます。

  • カレントチャンクが切り替わった日時に設定される情報

    マージ元チャンクの「カレントチャンクが切り替わった日時」のうち,最も新しい日時が設定されます。

(c) 過去に通常状態になったことがない待機状態のチャンクと,過去に通常状態になったことがある待機状態のチャンクをマージしたとき

過去に通常状態になったことがない待機状態のチャンクと,過去に通常状態になったことがある待機状態のチャンクをマージしたときは,マージ先チャンクに,チャンクの作成日時およびカレントチャンクが切り替わった日時が設定されます。

図10‒8 過去に通常状態になったことがない待機状態のチャンクと,過去に通常状態になったことがある待機状態のチャンクをマージした例

[図データ]

[説明]

過去に通常状態になったことがない待機状態のチャンク(チャンク1)と,過去に通常状態になったことがある待機状態のチャンク(チャンク2)をマージすると,マージ先チャンクとして待機状態のチャンク(チャンク4)が作成されます。

その際,カレントチャンクは変更されません。また,チャンク4に,チャンクの作成日時およびカレントチャンクが切り替わった日時が設定されます。

  • チャンクの作成日時に設定される情報

    マージ元チャンクの「チャンクの作成日時」のうち,最も古い日時が設定されます。

  • カレントチャンクが切り替わった日時に設定される情報

    マージ元チャンクの「カレントチャンクが切り替わった日時」のうち,最も新しい日時が設定されます。

注意事項

過去に通常状態になったことがない待機状態のチャンクと,過去に通常状態になったことがある待機状態のチャンクをマージした場合,マージ先チャンク(待機状態のチャンク)を通常状態のチャンクに変更しても,カレントチャンクにはなりません。

そのため,過去に通常状態になったことがない待機状態のチャンクと,過去に通常状態になったことがある待機状態のチャンクをマージすることは推奨しません。