Hitachi

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


11.4.14 マルチチャンク表を再編成する方法(チャンク単位で再編成する場合)

マルチチャンク表をチャンク単位で再編成する方法を説明します。チャンク単位の再編成は,次のどちらかの方法で行います。通常は,1.の方法でチャンク単位の再編成を実行してください。

  1. 表の検索業務を継続した状態で再編成をする方法

    この方法の場合,再編成中の表を検索することができます(更新はできません)。

    ただし,再編成前と再編成後の両方のデータを一時的に保持する必要があるため,再編成対象の表を格納しているデータ用DBエリアにその分の空き容量が必要になります。空き容量が不足している場合は,この方法は実施できません。そのため,この方法を実施する場合は,adbdbstatusコマンドで,再編成を実行するチャンクのデータ容量と,表を格納しているデータ用DBエリアの空き容量を比較してください。adbdbstatusコマンドについては,マニュアルHADB コマンドリファレンスadbdbstatus(データベースの状態解析)を参照してください。

    この方法の再編成手順については,「(1) 表の検索業務を継続した状態で再編成をする場合」を参照してください。

  2. 表の検索業務を停止して再編成をする方法

    再編成対象の表を格納しているデータ用DBエリアの空き容量が不足しているために1.の方法が実施できない場合は,この方法でチャンク単位の再編成を実行してください。この方法の場合,再編成中の表を検索,更新することはできません。

    この方法の再編成手順については,「(2) 表の検索業務を停止して再編成をする場合」を参照してください。

    なお,カレントチャンクだけが再編成対象となる場合,カレントチャンクに格納されているデータ容量分の空き容量がデータ用DBエリアに必要になります。データ用DBエリアの空き容量が不足している場合は,「11.10.6 データ用DBエリアの空き容量を確保する方法」を参照して,空き容量不足を解消してください。

メモ

マルチチャンク表がカラムストア表の場合,チャンク単位で再編成を実行するサンプルシェルを提供しています。詳細については,「11.4.16 マルチチャンク表を再編成する方法(サンプルシェルを使用して再編成する場合)」を参照してください。

〈この項の構成〉

(1) 表の検索業務を継続した状態で再編成をする場合

チャンク単位の再編成手順を次に示します。

手順

  1. APやコマンドが再編成対象の表を更新できない状態にする

    次の操作を実行して,APやコマンドが再編成対象の表を更新できない状態にしてください。

    • HADBサーバマシン上で動作している,再編成対象の表を更新するコマンドやジョブ(定期的に実行しているadbimportコマンドやadbmergechunkコマンドなど)を停止してください。

    • HADBサーバにアクセスして再編成対象の表を更新するAPや,HADBサーバにアクセスして再編成対象の表を更新するコマンドをすべて停止してください。

    上記の操作を両方とも実行することを推奨します。

  2. 再編成対象のチャンクの情報を取得する

    システム表STATUS_CHUNKS表を検索し,再編成対象のチャンクについて,次に示す情報を取得してください。STATUS_CHUNKS表を検索する方法については,「付録C.9 システム表の検索」の「(3) 表名から表内の全チャンクの情報を調べる場合」を参照してください。

    • CHUNK_COMMENT(チャンクに設定されたコメント)

    • CHUNK_STATUS(チャンクの状態)

  3. カレントチャンクの情報を取得する

    システム表STATUS_CHUNKS表を検索し,カレントチャンクについて次に示す情報を取得してください。STATUS_CHUNKS表を検索する方法については,「付録C.9 システム表の検索」の「(16) カレントチャンクの情報を調べる場合」を参照してください。

    • CHUNK_ID(チャンクID)

      再編成対象のチャンクIDと一致しているかどうか(再編成対象のチャンクがカレントチャンクかどうか)を確認してください。

    • CHUNK_COMMENT(チャンクに設定されたコメント)

  4. マルチチャンク表のデータをチャンク単位にエクスポートする

    -cオプションを指定したadbexportコマンドで,マルチチャンク表のデータをチャンク単位にエクスポートしてください。チャンク単位にエクスポートする方法については,「11.4.5 チャンク単位にデータをエクスポートする方法」を参照してください。

  5. エクスポートしたデータを,待機状態のチャンクとしてバックグラウンドインポートする

    adbimportコマンドに次に示すオプションを指定して,手順4.でエクスポートしたデータをバックグラウンドインポートしてください。

    • -bオプション

    • --status waitオプション

      --status waitオプションを指定すると,待機状態のチャンクが作成されて,そのチャンクにデータが格納されます。

    • -mオプション

      手順2.で確認したチャンクのコメントを指定してください。

    待機状態のチャンクを作成するバックグラウンドインポートについては,「11.4.4 マルチチャンク表にインポートするデータを一時的に検索対象外にする方法(待機状態のチャンクの作成)」を参照してください。

    重要

    adbimportコマンドを実行する際,インポートオプションadb_import_rthd_numには,「(3) インポートオプションの見積もり」に示す計算式を満たす値を指定してください。計算式を満たさない値を指定すると,データの格納効率が悪くなるおそれがあります。

  6. チャンクの状態を変更する

    手順2.で調べた再編成対象のチャンクの状態が待機状態の場合,この手順は不要です。手順7.に進んでください。

    手順2.で調べた再編成対象のチャンクの状態が通常状態の場合,-wオプションと-nオプションを両方指定して,adbchgchunkstatusコマンドを実行してください。2種類のチャンクの状態を同時に変更してください。

    • -wオプションに,手順4.でエクスポートしたデータを管理するチャンク(再編成対象のチャンク)を指定する

      通常状態のチャンクから,待機状態のチャンクに変更します。

    • -nオプションに,手順5.でバックグラウンドインポートした待機状態のチャンクを指定する

      待機状態のチャンクから,通常状態のチャンクに変更します。

    チャンクの状態を変更する方法については,「11.4.12 チャンクの状態を変更する方法」を参照してください。

  7. 再編成対象のチャンクを削除する

    手順4.でエクスポートしたチャンクを,PURGE CHUNK文で削除してください。なお,PURGE CHUNK文は,マルチチャンク表の検索と同時に実行できません。そのため,マルチチャンク表に対する操作が存在しないタイミングで,PURGE CHUNK文を実行してください。

    PURGE CHUNK文でチャンクを削除する方法については,「11.4.6 チャンク単位にデータを削除する方法」を参照してください。

    カレントチャンクに関する留意事項
    • カレントチャンクを再編成した場合,次の手順8.と手順9.は不要です。手順10.に進んでください。

    • カレントチャンク以外のチャンクを再編成した場合,カレントチャンクが再編成前とは変わります。カレントチャンクを再編成前と同じにしたい場合は,次の手順8.と手順9.を実施して,カレントチャンクを変更してください。

    • カレントチャンクを再編成前と同じにする必要がない場合は,次の手順8.と手順9.は不要です。手順10.に進んでください。

  8. adbimportコマンドで空のチャンク(データが0件のチャンク)を作成する

    adbimportコマンドの入力データファイルに空のファイルを指定して,-bオプションを指定してバックグラウンドインポートを実行してください。

  9. チャンクをマージする

    手順8.で作成した空のチャンクと,再編成前のカレントチャンクをadbmergechunkコマンドでマージしてください。このとき,adbmergechunkコマンドの-mオプションには,手順3.で確認した,再編成前のカレントチャンクのコメントを指定してください。

    チャンクのマージが完了すると,カレントチャンクが再編成前と同じになります。

  10. APやコマンドが再編成対象の表を更新できる状態にする

    次に示す方法で,APやコマンドが再編成対象の表を更新できる状態にしてください。

    • 手順1.で,HADBサーバマシン上で動作しているコマンドやジョブを停止した場合

      停止していたコマンドやジョブを開始してください。

    • 手順1.で,HADBサーバにアクセスするAPやコマンドを停止した場合

      停止していたAPやコマンドを開始してください。

重要
  • ここで説明する手順に従ってチャンク単位の再編成を実行した場合,再編成前と再編成後で,再編成対象のチャンクのチャンクIDが変わります。チャンクの構成,状態,コメントは変わりません。

  • 再編成中の表に対して,更新系SQLまたは表を更新するコマンド(adbimportコマンドやadbmergechunkコマンドなど)を実行しないでください。実行した場合,SQL文やコマンドで更新した内容が,再編成後に失われるおそれがあります。

(2) 表の検索業務を停止して再編成をする場合

チャンク単位の再編成手順を次に示します。

手順

  1. APやコマンドが再編成対象の表にアクセスできない状態にする

    次の操作を実行して,APやコマンドが再編成対象の表にアクセスできない状態にしてください。

    • adbchgsrvmodeコマンドに--offlineオプションを指定して,HADBサーバの稼働モードをオフラインモードに変更してください。さらに,HADBサーバマシン上で動作している,対象表を更新するコマンドやジョブ(定期的に実行しているadbimportコマンドやadbmergechunkコマンドなど)を停止してください。

    • HADBサーバにアクセスするAPやコマンドをすべて停止してください。

    上記の操作を両方とも実行することを推奨します。

  2. 再編成対象のチャンクの情報を取得する

    システム表STATUS_CHUNKS表を検索し,再編成対象のチャンクについて,次に示す情報を取得してください。STATUS_CHUNKS表を検索する方法については,「付録C.9 システム表の検索」の「(3) 表名から表内の全チャンクの情報を調べる場合」を参照してください。

    • CHUNK_COMMENT(チャンクに設定されたコメント)

    • CHUNK_STATUS(チャンクの状態)

    複数のチャンクを再編成する場合は,再編成対象の全チャンクの情報を取得してください。

  3. カレントチャンクの情報を取得する

    システム表STATUS_CHUNKS表を検索し,カレントチャンクについて次に示す情報を取得してください。STATUS_CHUNKS表を検索する方法については,「付録C.9 システム表の検索」の「(16) カレントチャンクの情報を調べる場合」を参照してください。

    • CHUNK_ID(チャンクID)

      再編成対象のチャンクIDと一致しているかどうか(再編成対象のチャンクにカレントチャンクが含まれるかどうか)を確認してください。

    • CHUNK_COMMENT(チャンクに設定されたコメント)

    重要

    この先の手順について

    • 再編成対象のチャンクがカレントチャンク以外の場合

      手順4.~手順6.の操作を各チャンクに実施してください。そのあとで,手順7.に進んでください。

    • 再編成対象のチャンクがカレントチャンクとカレントチャンク以外の両方の場合

      ・最初に,手順4.~手順6.の操作をカレントチャンク以外の各チャンクに実施してください。

      ・次に,手順4.~手順6.の操作をカレントチャンクに実施してください。

      ・上記が完了したあとに,手順8.に進んでください。

    • 再編成対象のチャンクがカレントチャンクだけの場合

      手順4. → 手順6. → 手順5.の順序で操作してください。そのあとで,手順8.に進んでください。

  4. マルチチャンク表のデータをチャンク単位にエクスポートする

    -cオプションを指定したadbexportコマンドで,マルチチャンク表のデータをチャンク単位にエクスポートしてください。チャンク単位にエクスポートする方法については,「11.4.5 チャンク単位にデータをエクスポートする方法」を参照してください。

  5. 再編成対象のチャンクを削除する

    手順4.でデータをエクスポートした再編成対象のチャンクを,PURGE CHUNK文で削除してください。

    PURGE CHUNK文でチャンクを削除する方法については,「11.4.6 チャンク単位にデータを削除する方法」を参照してください。

  6. エクスポートしたデータを,マルチチャンク表にバックグラウンドインポートする

    • 手順2.で調べた再作成対象のチャンクの状態が通常状態の場合

      adbimportコマンドに次に示すオプションを指定して,手順4.でエクスポートしたデータをバックグラウンドインポートしてください。

      • -bオプション

      • -mオプション

        手順2.で確認したチャンクのコメントを指定してください。

      バックグラウンドインポートについては,「11.4.2 マルチチャンク表にデータを格納する方法(バックグラウンドインポート)」を参照してください。

    • 手順2.で調べた再作成対象のチャンクの状態が待機状態の場合

      adbimportコマンドに次に示すオプションを指定して,手順4.でエクスポートしたデータをバックグラウンドインポートしてください。

      • -bオプション

      • --status waitオプション

        --status waitオプションを指定すると,待機状態のチャンクが作成されて,そのチャンクにデータが格納されます。

      • -mオプション

        手順2.で確認したチャンクのコメントを指定してください。

      待機状態のチャンクを作成するバックグラウンドインポートについては,「11.4.4 マルチチャンク表にインポートするデータを一時的に検索対象外にする方法(待機状態のチャンクの作成)」を参照してください。

    重要

    adbimportコマンドを実行する際,インポートオプションadb_import_rthd_numには,「(3) インポートオプションの見積もり」に示す計算式を満たす値を指定してください。計算式を満たさない値を指定すると,データの格納効率が悪くなるおそれがあります。

  7. カレントチャンクを変更する

    カレントチャンクが再編成前と再編成後で異なっている状態になっています。カレントチャンクを再編成前と同じにしたい場合は,次に示す操作を実施してください。カレントチャンクを再編成前と同じにする必要がない場合は,次に示す操作は不要です。手順8.に進んでください。

    • adbimportコマンドで空のチャンク(データが0件のチャンク)を作成する

      adbimportコマンドの入力データファイルに空のファイルを指定して,-bオプションを指定してバックグラウンドインポートを実行してください。

    • チャンクをマージする

      上記の操作で作成した空のチャンクと,再編成前のカレントチャンクをadbmergechunkコマンドでマージしてください。このとき,adbmergechunkコマンドの-mオプションには,手順3.で確認した,再編成前のカレントチャンクのコメントを指定してください。

    チャンクのマージが完了すると,カレントチャンクが再編成前と同じになります。

  8. APやコマンドが再編成対象の表にアクセスできる状態にする

    次に示す方法で,APやコマンドが再編成対象の表にアクセスできる状態にしてください。

    • 手順1.で,HADBサーバの稼働モードをオフラインモードに変更した場合

      adbchgsrvmodeコマンドに--normalオプションを指定して,HADBサーバの稼働モードを通常モードに変更してください。また,HADBサーバマシン上で動作しているコマンドやジョブを停止した場合は,停止していたコマンドやジョブを開始してください。

    • 手順1.で,HADBサーバにアクセスするAPやコマンドを停止した場合

      停止していたAPやコマンドを開始してください。

重要
  • ここで説明する手順に従ってチャンク単位の再編成を実行した場合,再編成前と再編成後で,再編成対象のチャンクのチャンクIDが変わります。チャンクの構成,状態,コメントは変わりません。

  • 再編成中の表に対して,更新系SQLまたは表を更新するコマンド(adbimportコマンドやadbmergechunkコマンドなど)を実行しないでください。実行した場合,SQL文やコマンドで更新した内容が,再編成後に失われるおそれがあります。

(3) インポートオプションの見積もり

再編成を実行した要因によって,インポートオプションadb_import_rthd_numの見積もり方法が異なります。該当する要因の見積もり方法を参照してください。

■行の更新および削除を繰り返したことによって再編成をした場合(かつマルチチャンク表がローストア表の場合)

adbimportコマンドを実行する際,インポートオプションadb_import_rthd_numには,次の計算式を満たす値を指定してください。計算式を満たさない値を指定すると,データの格納効率が悪くなるおそれがあります。

計算式

インポートオプションadb_import_rthd_numの指定値 ≦
    ↑ 再編成対象のセグメント数 × データの格納効率 ↑+1
再編成対象のセグメント数

再編成対象のチャンクの使用中セグメント数を代入してください。

-d usedオプションを指定したadbdbstatusコマンドで,DBエリア,表とインデクスの使用量情報を出力してください。そして,Chunk_ID(チャンクID)をキーにしてUsed_segments(チャンクごとの使用中セグメント数)の出力内容を確認してください。

adbdbstatusコマンドについては,マニュアルHADB コマンドリファレンスadbdbstatus(データベースの状態解析)を参照してください。

表全体を再編成する場合は,表内の全チャンクの使用中セグメント数を合計してください。

データの格納効率

再編成対象のチャンクのデータの格納効率を代入してください。「11.4.13 マルチチャンク表の再編成が必要かどうかを確認する方法」の「(2) 再編成が必要かどうかを確認する方法」の「(a) マルチチャンク表がローストア表の場合」で求めた値を代入してください。

表全体を再編成する場合は,表内の全チャンクのデータの格納効率を計算してください。

■行の追加,更新,および削除を繰り返したことによって再編成をした場合(かつマルチチャンク表がカラムストア表の場合)

adbimportコマンドを実行する際,インポートオプションadb_import_rthd_numには,次の計算式を満たす値を指定してください。計算式を満たさない値を指定すると,データの格納効率が悪くなるおそれがあります。

計算式

インポートオプションadb_import_rthd_numの指定値 ≦
    ↑ 再編成対象のセグメント数 × 再編成対象の行数
       ÷ カラムデータ用セグメントに格納されている行数 ↑+1
再編成対象のセグメント数

再編成対象のチャンクの使用中のカラムデータ用セグメント数を代入してください。-d usedオプションを指定したadbdbstatusコマンドで,DBエリア,表とインデクスの使用量情報を出力してください。そして,Chunk_ID(チャンクID)をキーにして,Segment_type(セグメントの種類)がColumn_dataの行のUsed_segments(使用中セグメント数)の出力内容を確認してください。

adbdbstatusコマンドについては,マニュアルHADB コマンドリファレンスadbdbstatus(データベースの状態解析)を参照してください。

表全体を再編成する場合は,表内の全チャンクの使用中のカラムデータ用セグメント数を合計してください。

再編成対象の行数

再編成対象のチャンク内のデータ件数を代入してください。

表全体を再編成する場合は,表のデータ件数を代入してください。

adbsqlコマンドの#GETCOUNTコマンドを実行すると,チャンク内のデータ件数,または表のデータ件数を求めることができます。

カラムデータ用セグメントに格納されている行数

再編成対象のチャンクにadbimportコマンドでインポートした行数,または更新行のカラム化機能によってローストア形式からカラムストア形式に変換された行数を代入してください。

adbdbstatusコマンドを実行して,再編成要否の情報を取得してください。再編成対象のチャンクのColumn_data_numの値が,カラムデータ用セグメントに格納されている行数です。

表全体を再編成する場合は,表内の全チャンクのColumn_data_numの値を合計してください。

■少量のデータをバックグラウンドインポートで繰り返し追加したことによって再編成をした場合

adbimportコマンドを実行する際,インポートオプションadb_import_rthd_numには,次の計算式を満たす値を指定してください。計算式を満たさない値を指定すると,データの格納効率が悪くなるおそれがあります。

計算式

インポートオプションadb_import_rthd_numの指定値 ≦
    ↑ 再編成対象のセグメント数 × データの格納効率 ↑+1
再編成対象のセグメント数
  • ローストア表を再編成する場合

    再編成対象のチャンクの使用中セグメント数を代入してください。

    -d usedオプションを指定したadbdbstatusコマンドで,DBエリア,表とインデクスの使用量情報を出力してください。そして,Chunk_ID(チャンクID)をキーにしてUsed_segments(チャンクごとの使用中セグメント数)の出力内容を確認してください。

    adbdbstatusコマンドについては,マニュアルHADB コマンドリファレンスadbdbstatus(データベースの状態解析)を参照してください。

    表全体を再編成する場合は,表内の全チャンクの使用中セグメント数を合計してください。

  • カラムストア表を再編成する場合

    再編成対象のチャンクの使用中のカラムデータ用セグメント数を代入してください。-d usedオプションを指定したadbdbstatusコマンドで,DBエリア,表とインデクスの使用量情報を出力してください。そして,Chunk_ID(チャンクID)をキーにして,Segment_type(セグメントの種類)がColumn_dataの行のUsed_segments(使用中セグメント数)の出力内容を確認してください。

    adbdbstatusコマンドについては,マニュアルHADB コマンドリファレンスadbdbstatus(データベースの状態解析)を参照してください。

    表全体を再編成する場合は,表内の全チャンクの使用中のカラムデータ用セグメント数を合計してください。

データの格納効率

再編成対象のチャンクのデータの格納効率を代入してください。「11.4.13 マルチチャンク表の再編成が必要かどうかを確認する方法」の「(2) 再編成が必要かどうかを確認する方法」の「(c) 少量のデータをバックグラウンドインポートで繰り返し追加した場合」で求めた値を代入してください。

表全体を再編成する場合は,表内の全チャンクのデータの格納効率を計算してください。