Hitachi

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


11.4.25 チャンクのアーカイブを意識した運用例

ここでは,検索頻度が少ない古いデータをアーカイブして,データベースの容量増加を抑える運用方法を,次に示す例を使って説明します。ここで説明する運用方法の前提は,次のとおりです。

このシステムでの運用の流れを次の図に示します。

図11‒37 このシステムでの運用の流れ(チャンクのアーカイブの利用)

[図データ]

〈この項の構成〉

(1) アーカイブディレクトリの作成

この運用例では,データ容量削減のために,1年経過したデータをチャンク単位にアーカイブします。チャンクをアーカイブする際,アーカイブファイルを格納するためのアーカイブディレクトリが必要になります。運用を開始する前に,アーカイブディレクトリを作成してください。

次に示す手順で,アーカイブディレクトリを作成します。

手順

  1. スーパユーザでOSにログインする

    スーパユーザで,サーバマシンのOSにログインしてください。

  2. アーカイブディレクトリ用のファイルシステムを作成する

    OSのコマンドを実行し,アーカイブディレクトリ用のファイルシステムを作成します。

    アーカイブディレクトリ用のLVとして作成した/dev/vg_hadb/hadb_archivedirを,ext4のファイルシステムで作成する場合の実行例を次に示します。

    ■コマンドの実行例

    mkfs -t ext4 /dev/vg_hadb/hadb_archivedir
  3. アーカイブディレクトリ用のマウントポイントを作成する

    OSのコマンドを実行し,アーカイブディレクトリ用のマウントポイントを作成します。実行例を次に示します。

    ■コマンドの実行例

    mkdir -p /HADB/archive
  4. アーカイブディレクトリ用のファイルシステムがあるVGを活性化する

    OSのコマンドを実行し,アーカイブディレクトリ用のファイルシステムがあるVGを活性化します。実行例を次に示します。

    ■コマンドの実行例

    vgchange -a y /dev/vg_hadb
  5. アーカイブディレクトリ用ファイルシステムをマウントする

    OSのコマンドを実行し,アーカイブディレクトリ用ファイルシステムをマウントします。実行例を次に示します。

    ■コマンドの実行例

    mount /dev/vg_hadb/hadb_archivedir /HADB/archive -t ext4 -o defaults,noatime,_netdev4
  6. アーカイブディレクトリのオーナーを変更する

    OSのコマンドを実行し,アーカイブディレクトリのオーナーを変更します。アーカイブディレクトリを使用するHADB管理者とHADB管理グループを指定してください。

    HADB管理者のユーザ名がadbmanager,HADB管理グループがadbgroupの場合の実行例を次に示します。

    ■コマンドの実行例

    chown adbmanager.adbgroup /HADB/archive

(2) アーカイブマルチチャンク表の定義

アーカイブディレクトリを作成したあとで,アーカイブマルチチャンク表とインデクスを定義します。

この運用例では,センサデータを一元管理するために,通信制御機器ログ表(INSTRUMENT_LOG)およびインデクスを定義します。

(a) 通信制御機器ログ表(INSTRUMENT_LOG)の定義

通信制御機器ログ表(INSTRUMENT_LOG)は,DBエリアTBLDAT_003に格納するように定義します。また,バックグラウンドインポートおよびチャンクのアーカイブを実施するために,通信制御機器ログ表をアーカイブマルチチャンク表として定義します。

この運用例では,次に示す数のチャンクが必要となります。

  • 1時間ごとにバックグラウンドインポートで追加したセンサデータを管理するチャンク(24個)

    1時間ごとにバックグラウンドインポートでデータを追加するため,1日分のチャンクは24個になります。

  • 1日ごとのセンサデータを管理するチャンク(32個)

    1か月分(31日分)に加えて,それらをマージするマージ先チャンクが1個必要となるため,合計すると32個になります。

  • 1か月ごとのセンサデータを管理するチャンク(61個)

    5年分(60か月分)に加えて,それらをマージするマージ先チャンクが1個必要となるため,合計すると61個になります。

このため,安全率を1.2とすると,作成されるチャンク数の最大値は次の値となります。

[図データ]

メモ

チャンク数が増加すると検索性能に影響を与えます。そのため,使用するチャンク数をできるだけ抑えるように,設計・運用することを推奨します。

この見積もりによって,チャンク数の最大値には141を設定します。この値をCREATE TABLE文のチャンク指定のCHUNKに指定します。

また,通信制御機器ログ表(INSTRUMENT_LOG)の収集日時列(C_TIME)は,データ分析の範囲を特定でき,かつチャンクごとにデータが重ならない列です。そのため,アーカイブレンジ列とします。アーカイブレンジ列に自動的に定義されるレンジインデクスは,通信制御機器ログ表(INSTRUMENT_LOG)に定義する,ほかのインデクスを格納するDBエリアIDXDAT_003に格納します。

次に示す内容を,CREATE TABLE文のチャンクアーカイブ指定に指定します。

  • アーカイブレンジ列の列名(C_TIME

  • 自動的に定義されるレンジインデクスを格納するDBエリア名(IDXDAT_003

  • 作成したアーカイブディレクトリ(/HADB/archive

CREATE TABLE文の例を次に示します。

■CREATE TABLE文の例
CREATE TABLE "INSTRUMENT_LOG"
            ("SID" INTEGER,
             "C_TIME" TIMESTAMP,
             "TRAFFIC" INTEGER,
             "THROUGH" INTEGER,
             "RETRY" INTEGER,
              ...)
  IN "TBLDAT_003"
  CHUNK= 141
  ARCHIVABLE RANGECOLUMN="C_TIME" IN "IDXDAT_003"
  ARCHIVEDIR='/HADB/archive'

CREATE TABLE文については,マニュアルHADB SQLリファレンス定義系SQLCREATE TABLE(表の定義)を参照してください。

(b) 通信制御機器ログ表(INSTRUMENT_LOG)に対するインデクスの定義

通信制御機器ログ表に対して,B-treeインデクスを定義します。B-treeインデクスはDBエリアIDXDAT_003に格納します。

機器ID列(SID)に対してB-treeインデクスを定義します。CREATE INDEX文の例を次に示します。

■CREATE INDEX文の例
CREATE INDEX "SID_IDX"
   ON "INSTRUMENT_LOG"("SID") IN "IDXDAT_003"
   EMPTY

CREATE INDEX文については,マニュアルHADB SQLリファレンス定義系SQLCREATE INDEX(インデクスの定義)を参照してください。

(c) この運用例で使用する表のイメージ

この運用例で使用する表のイメージを次の図に示します。

図11‒38 この運用例で使用する表のイメージ

[図データ]

(3) 新しいセンサデータの追加(バックグラウンドインポート)

通信制御機器からリアルタイムにセンサデータが発生します。発生したセンサデータは,1時間ごとに通信制御機器ログ表(INSTRUMENT_LOG)に追加します。

センサデータの追加は,バックグラウンドインポートで実行します。1回のバックグラウンドインポートでアーカイブマルチチャンク表に格納したデータ,およびそのインデクスは,1つの固まり(チャンク)として管理されます。チャンクについては,「2.14.2 データインポート単位のデータ管理(チャンク)」を参照してください。

メモ

データをチャンク単位で管理することで,チャンク単位でのバックアップの取得や,データの削除ができます。バックグラウンドインポートやチャンクをマージする際に,チャンクにコメントを設定できます。コメントを設定しておくと,操作対象のチャンクを特定しやすくなります。

-bオプションを指定したadbimportコマンドを実行して,バックグラウンドインポートを行います。adbimportコマンドの実行例を次に示します。

■コマンドの実行例
adbimport -u ADBUSER01 -p '#HelloHADB_01' -k "'" -s , -g 10
          -w /home/adbmanager/tmp
          -z /home/adbmanager/imp_file/imp_opt_file03.txt
          -b
          -m '2015/03/31'
          INSTRUMENT_LOG
          /home/adbmanager/imp_file/imp_data_path03.txt
[説明]

通信制御機器ログ表(INSTRUMENT_LOG)に対して,入力データパスファイル(/home/adbmanager/imp_file/imp_data_path03.txt)に指定した入力データファイルの内容をバックグラウンドインポートします。

「2015年3月31日」に発生したセンサデータをバックグラウンドインポートで追加するため,-mオプションに「チャンクに設定するコメント」を指定します。

1時間ごとにバックグラウンドインポートを実行します。その結果,1日分(24時間分)のチャンクが24個作成されます。

adbimportコマンドについては,マニュアルHADB コマンドリファレンスadbimport(データのインポート)を参照してください。また,「11.4.2 マルチチャンク表にデータを格納する方法(バックグラウンドインポート)」も参照してください。

(4) データの検索

バックグラウンドインポートを実行している間も,アーカイブマルチチャンク表のデータを検索できます。

バックグラウンドインポートによってセンサデータを追加することで,インポートの対象となるデータベースに対して検索を実行しているHADBユーザが存在しても,データのインポートを実行できます(検索と並行してデータのインポートを実行できます)。

バックグラウンドインポートとデータの検索の関係を次の図に示します。

図11‒39 バックグラウンドインポートとデータの検索の関係

[図データ]

(5) チャンクのマージ(チャンク数の削減)

チャンク数が増加すると検索性能が低下するおそれがあるため,定期的にチャンクをマージする必要があります。この運用例では,センサデータを1時間ごとにバックグラウンドインポートしているので,1日で24個のチャンクが作成されます。

この運用例では,次に示すタイミングで複数のチャンクをマージして,1個のチャンクにマージしています。最終的には,月単位でチャンクを管理します。

ここでは,1日分(2015年3月31日分)のデータを,1つのチャンクにマージする例を次に示します。

(a) マージ対象とするチャンクの特定

マージ対象とするチャンクのチャンクIDを特定するには,次に示すように,システム表STATUS_CHUNKSを検索します。SQL文の例を次に示します。

■SQL文の例
SELECT "CHUNK_ID" FROM "MASTER"."STATUS_CHUNKS" TC
   WHERE "TABLE_SCHEMA"='ADBUSER01' AND "TABLE_NAME"='INSTRUMENT_LOG'
      AND "CHUNK_COMMENT"='2015/03/31'
■検索結果
 CHUNK_ID
 --------------------
                   92
           (中略)
                  115
[説明]

この例の場合は,バックグラウンドインポート時に付加したチャンクのコメント('2015/03/31')をキーにSTATUS_CHUNKS表を検索することで,マージ対象とするチャンクのチャンクID(92115)を特定しています。

対象となるチャンクと,そのチャンクIDについては,「11.4.8 チャンクの状態や作成されているチャンク数を確認する方法」を参照して確認してください。

(b) チャンクのマージ

adbmergechunkコマンドを実行してチャンクをマージします。adbmergechunkコマンドの実行例を次に示します。

■コマンドの実行例
adbmergechunk -u ADBUSER01 -p '#HelloHADB_01' -g 2
              -w /home/adbmanager/tmp
              -z /home/adbmanager/merge_file/merge_opt_file03.txt
              -m '2015/03/31'
              -c 92-115
              INSTRUMENT_LOG
[説明]

通信制御機器ログ表(INSTRUMENT_LOG)に対してマージチャンクオプションファイル(/home/adbmanager/merge_file/merge_opt_file03.txt)に指定した値を入力情報として,-cオプションに指定したチャンクのマージを実行します。

この例では,92から115のチャンクIDのチャンクを1つの待機状態のチャンクにマージすることで,1日分のセンサデータ(2015年3月31日分)としてまとめています。

チャンクのマージの例を次の図に示します。

図11‒40 チャンクのマージの例

[図データ]

チャンクIDが92から115のチャンクは,adbmergechunkコマンドの正常終了時に自動的に削除されます。

メモ

チャンクをマージすることで,検索性能の低下を防ぐことができます。また,1表,1DBエリアが管理できるチャンク数には限りがあります。使用中のチャンク数が,1表,1DBエリアが管理できる上限に達した場合には,複数のチャンクを1つにマージしてください。チャンクをマージすることで,使用中のチャンク数を削減できます。

adbmergechunkコマンドについては,マニュアルHADB コマンドリファレンスadbmergechunk(チャンクのマージ)を参照してください。また,「11.4.9 チャンクをマージする方法(チャンク数を減らす方法)」も参照してください。

(6) チャンクのアーカイブ(チャンク単位でのデータの圧縮)

この運用例では,データベースに追加してから1年が経過したデータは,検索頻度が非常に少なくなるため,チャンク単位でアーカイブ(データの圧縮)します。チャンクをアーカイブすることで,データベースの容量を削減できます。

重要

アーカイブしたチャンク内のデータを検索する場合,次に示す原因によって,アーカイブされていないチャンク内のデータを検索するときに比べて検索時間が長くなります。

  • データの伸長に時間が掛かる

  • インデクスを使用した検索ができない

この運用例のように,検索頻度が非常に少ないが,長期間保持する必要があるデータをアーカイブするようにしてください。詳細については,「2.15.2 チャンクアーカイブ機能を適用するケース」を参照してください。

(a) チャンクのアーカイブの実行

adbarchivechunkコマンドを実行して,チャンクをアーカイブします。ここでは,2014年3月のセンサデータを管理するチャンクをアーカイブします。adbarchivechunkコマンドの実行例を次に示します。

■コマンドの実行例
adbarchivechunk -u ADBUSER01 -p '#HelloHADB_01' -g 2
                -z /home/adbmanager/arc_file/archive_chunk03.def
                -r 2014/03/01-2014/03/31
                INSTRUMENT_LOG
[説明]

adbarchivechunkコマンドの-rオプションで,アーカイブするチャンクの日付の範囲(2014/03/01-2014/03/31)を指定します。-rオプションに指定した日付の範囲に,アーカイブレンジ列の値の範囲が含まれているチャンクがアーカイブされます。この運用例では,通信制御機器ログ表(INSTRUMENT_LOG)の収集日時列(C_TIME)を,アーカイブレンジ列に指定しています。そのため,収集日時列(C_TIME)の値を基に,2014年3月分のチャンクがアーカイブされます。

(b) アーカイブの実行結果の確認

adbdbstatusコマンドを実行して,アーカイブしたチャンクの状態を確認します。adbdbstatusコマンドで「アーカイブ状態のチャンクのサマリ情報」を出力すると,アーカイブしたチャンクの状態を確認できます。adbdbstatusコマンドの実行例を次に示します。

■コマンドの実行例
adbdbstatus -c archivechunk
            -n ADBUSER01.INSTRUMENT_LOG
            -r 2014/03/01-2014/03/31
[説明]

アーカイブ状態のチャンク(2014年3月分)のサマリ情報を出力します。次の出力項目から,アーカイブしたチャンクに格納されている行数,アーカイブしたチャンクのデータ容量,およびアーカイブしたチャンクの圧縮率が確認できます。

  • Rows(アーカイブ状態のチャンクに格納されている行数)

  • Archive_file_size(アーカイブ状態のチャンクに対応している全アーカイブファイルのファイルサイズの合計値)

  • Unarchive_table_size(アーカイブ状態になる前のチャンクで表を格納するために使用していたセグメントの容量

  • Unarchive_index_size(アーカイブ状態になる前のチャンクでインデクスを格納するために使用していたセグメントの容量

  • Compression_ratio(アーカイブ状態のチャンクの圧縮率)

(7) 古いデータ(チャンク)の削除

データ容量の増加を抑えるため,5年が経過したデータ(アーカイブ状態のチャンク)を削除します。

通信制御機器ログ表(INSTRUMENT_LOG)から,データを追加して5年が経過した古いチャンクを削除します。削除対象のチャンクのチャンクIDを確認してから,PURGE CHUNK文でチャンクを削除します。

ここでは,2010年4月分のチャンクを削除します。

(a) チャンクIDの確認

adbdbstatusコマンドを実行して,削除対象のチャンクのチャンクIDを確認します。adbdbstatusコマンドで「アーカイブ状態のチャンクのサマリ情報」を出力すると,削除対象のチャンクのチャンクIDを確認できます。adbdbstatusコマンドの実行例を次に示します。

■コマンドの実行例
adbdbstatus -c archivechunk
            -n ADBUSER01.INSTRUMENT_LOG
            -r 2010/04/01-2010/04/30
[説明]

アーカイブ状態のチャンク(2010年4月分)のサマリ情報を出力します。次の出力項目から,削除対象のチャンクのチャンクID,およびチャンク削除後にアーカイブディレクトリに確保される空き容量が確認できます。

  • Chunk_ID(チャンクID)

  • Archive_file_size(アーカイブ状態のチャンクに対応している全アーカイブファイルのファイルサイズの合計値)

(b) チャンクの削除

adbdbstatusコマンドで確認したチャンクIDを基に,チャンクを削除します。チャンクを削除するには,PURGE CHUNK文の探索条件にチャンクIDを指定して実行します。PURGE CHUNK文の例を次に示します。

■SQL文の例
PURGE CHUNK "INSTRUMENT_LOG" WHERE CHUNKID=4
[説明]

チャンクIDが4のチャンクに含まれるデータを削除します。

この例の場合,月単位でチャンクがマージされているので,1か月分のデータが削除されます。

PURGE CHUNK文については,マニュアルHADB SQLリファレンス操作系SQLPURGE CHUNK(チャンク内の全行削除)を参照してください。また,「11.4.6 チャンク単位にデータを削除する方法」も参照してください。

(8) 新しいデータの追加・マージ・アーカイブと古いデータの削除の繰り返し

次に示す運用を繰り返すことで,長期間保持するデータの容量を抑えながら,センサデータを分析する運用を継続できます。