Hitachi

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


11.4.13 マルチチャンク表の再編成が必要かどうかを確認する方法

マルチチャンク表の再編成が必要かどうかを確認する方法について説明します。

メモ
〈この項の構成〉

(1) 表の再編成が必要な理由

マルチチャンク表に対して,次の操作を繰り返し実行すると,表の検索性能やデータの格納効率が低下します。

この場合,マルチチャンク表を再編成すると,データ用DBエリア内のむだな空き領域が解放されて,表の検索性能やデータの格納効率が向上します。

マルチチャンク表の検索性能やデータの格納効率が低下する理由を次に示します。

マルチチャンク表がローストア表の場合

シングルチャンク表の場合と理由は同じです。理由については,「11.1.10 シングルチャンク表の再編成が必要かどうかを確認する方法」の「(1) 表の再編成が必要な理由」の「シングルチャンク表がローストア表の場合」を参照してください。

マルチチャンク表がカラムストア表の場合

シングルチャンク表の場合と理由は同じです。理由については,「11.1.10 シングルチャンク表の再編成が必要かどうかを確認する方法」の「(1) 表の再編成が必要な理由」の「シングルチャンク表がカラムストア表の場合」を参照してください。

ローストア表,カラムストア表共通の理由

マルチチャンク表に対して,adbimportコマンドによる少量データのバックグラウンドインポートを繰り返し実行すると,空き領域の一部が使用されなくなるおそれがあります。この使用されない空き領域は再利用されません(むだな空き領域になります)。その結果,データの格納効率が悪くなり,表の検索性能が低下します。

(2) 再編成が必要かどうかを確認する方法

マルチチャンク表の再編成が必要かどうかを確認する方法を説明します。

マルチチャンク表がローストア表で,SQL文による行の更新,削除を繰り返した場合は,「(a) マルチチャンク表がローストア表の場合」を参照して,表の再編成が必要かどうかを確認してください。

マルチチャンク表がカラムストア表で,SQL文による行の追加,更新,削除を繰り返した場合は,「(b) マルチチャンク表がカラムストア表の場合」を参照して,表の再編成が必要かどうかを確認してください。

表に対してadbimportコマンドによる少量データのバックグラウンドインポートを繰り返した場合は,「(c) 少量のデータをバックグラウンドインポートで繰り返し追加した場合」を参照して,表の再編成が必要かどうかを確認してください。

(a) マルチチャンク表がローストア表の場合

データの格納効率を計算してください。データの格納効率が悪い場合は,マルチチャンク表の再編成を実行してください。データの格納効率はチャンク単位で確認します。手順を次に示します。

手順

  1. 現在のチャンクが使用しているセグメント数を確認する

    adbdbstatusコマンドで,使用量情報を出力してください。そして,Chunk_ID(チャンクID)をキーにして,Used_segments(使用中セグメント数)を確認してください。adbdbstatusコマンドについては,マニュアルHADB コマンドリファレンスadbdbstatus(データベースの状態解析)を参照してください。

  2. 現在のチャンク内のデータ件数を基に,データ用DBエリアのセグメント数を求める

    現在のチャンク内のデータ件数を確認したあとで,データ用DBエリアのセグメント数を求めてください。

    現在のチャンク内のデータ件数は,adbsqlコマンドのサブコマンド#GETCOUNTで確認できます。手順1.で確認したチャンクIDを使用して,adbsqlサブコマンド#GETCOUNTを実行してください。adbsqlコマンドについては,マニュアルHADB コマンドリファレンスadbsql(SQLの実行)を参照してください。

    データ用DBエリアのセグメント数を求める場合は,「5.8.1 データ用DBエリアの総ページ数の求め方」の「(2) 変数の説明」の「(f) 変数SGROWTBLの求め方(マルチチャンク表の場合)」を参照してください。

    なお,変数SGROWTBLは,データ用DBエリアに格納されている全マルチチャンク表の全チャンクの合計を求める計算式となっています。ここでは,対象表の対象チャンクだけを求めてください。

  3. 求めた結果を基に,データの格納効率を求める

    手順1.および手順2.で求めた結果を基に,チャンク内のデータの格納効率を求めてください。計算式を次に示します。

    計算式

    [図データ]

    上記の計算結果が0に近い場合,データの格納効率が悪いため,そのチャンクを再編成してください。再編成の運用方法は幾つかあるため,「(3) 再編成方法の選択」を参照して,再編成の運用方法を決めてください。

(b) マルチチャンク表がカラムストア表の場合

adbdbstatusコマンドを実行して再編成要否の情報を確認し,マルチチャンク表の再編成をするかどうかを決めてください。確認手順を次に示します。

手順

  1. -d reorginfoオプションを指定したadbdbstatusコマンドを実行して,再編成要否の情報を出力する

  2. 再編成要否の情報のReorganization_necessity(再編成要否)の出力内容を確認する

    • Recommendedが出力されている場合

      Recommendedが出力されたチャンクの再編成を実行してください。再編成の運用方法は幾つかあるため,「(3) 再編成方法の選択」を参照して,再編成の運用方法を決めてください。

    • Not_recommendedが出力されている場合

      Not_recommendedが出力されたチャンクは再編成する必要はありません。

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

(c) 少量のデータをバックグラウンドインポートで繰り返し追加した場合

データの格納効率を計算してください。データの格納効率が悪い場合は,マルチチャンク表の再編成を実行してください。格納効率を求める計算式を次に示します。

計算式

[図データ]

上記の計算式で求めた結果が1に近いほど,チャンク内のデータの格納効率が良いと判断できます。逆に,0に近いほど,チャンク内のデータの格納効率が悪いと判断できます。0に近い場合は,マルチチャンク表の再編成を実行してください。

変数の説明

A

再編成の方法によって,代入する値が異なります。

  • チャンク単位で再編成をする場合

    チャンクの使用中ページ数を代入してください。

    チャンクの使用中ページ数を確認する場合は,-d usedオプションを指定したadbdbstatusコマンドを実行してください。DBエリア,表とインデクスの使用量情報を出力できます。DBエリア,表とインデクスの使用量情報から,格納効率を確認したいチャンクのChunk_IDをキーにして,Used_pagesの内容を確認してください。

  • 表全体の再編成をする場合

    表の使用中ページ数を代入してください。

    表の使用中ページ数を確認する場合は,adbdbstatusコマンドで,表のサマリ情報を出力してください。表のサマリ情報Used_pagesの内容を確認してください。

B

マルチチャンク表が格納されているデータ用DBエリアのページサイズ(単位:キロバイト)

データ用DBエリアのページサイズを確認する場合は,-c dbareaオプションを指定したadbdbstatusコマンドを実行してください。DBエリアのサマリ情報を出力できます。DBエリアのサマリ情報から,ページサイズを確認したいデータ用DBエリアのPage_sizeの内容を確認してください。

C

再編成の方法によって,代入する値が異なります。

  • チャンク単位で再編成をする場合

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

    チャンクの使用中セグメント数を確認する場合は,-d usedオプションを指定したadbdbstatusコマンドを実行してください。DBエリア,表とインデクスの使用量情報を出力できます。DBエリア,表とインデクスの使用量情報から,格納効率を確認したいチャンクのChunk_IDをキーにして,Used_segmentsの内容を確認してください。

    重要

    使用中セグメントが1つだけのチャンクを再編成しても,データの格納効率は向上しません。再編成対象のチャンクの使用中セグメント数が1,または1に近い場合は,次のどちらかの方法でデータを再編成してください。

  • 表全体の再編成をする場合

    表の使用中セグメント数を代入してください。

    表の使用中セグメント数を確認する場合は,adbdbstatusコマンドで,表のサマリ情報を出力してください。表のサマリ情報Used_segmentsの内容を確認してください。

(3) 再編成方法の選択

マルチチャンク表の再編成方法には,次の表に示すとおり,幾つかの方法があります。条件に合った方法を選択してください。

重要

マルチチャンク表全体を再編成した場合(特にデータ件数が多い場合),再編成に時間が掛かるおそれがあります。そのため,マルチチャンク表全体を再編成するのではなく,チャンク単位での定期的な再編成を推奨します(次の表に示す項番1の方法を推奨します)。

表11‒7 マルチチャンク表の再編成方法

項番

再編成の実行単位

表の検索要否,チャンクの構成

再編成の実行時に必要な条件

再編成の方法

1

チャンク単位

(1)再編成中の表を検索できる※1

(2)チャンクの構成,状態,コメントを再編成前と同じにできる

  1. データ用DBエリアの空き容量

    再編成前と再編成後の両方のデータを一時的に保持する必要があります。そのため,再編成対象のチャンクのデータ容量と同じ空き容量がデータ用DBエリア内に必要です。

    例えば,1TBのデータを格納するチャンクを再編成する場合,データ用DBエリア内の空き容量が1TB必要です。※2

  2. 出力データファイルの出力先の容量

    チャンクのデータをエクスポートする出力データファイルを格納できるディスク容量が必要です。

  3. 作業用一時ファイルの出力先の容量

    データをインポートする際に,一時的に作成される作業用一時ファイルを格納できるディスク容量が必要です。

11.4.14 マルチチャンク表を再編成する方法(チャンク単位で再編成する場合)」の「(1) 表の検索業務を継続した状態で再編成をする場合」で説明している手順で再編成してください。

2

(1)再編成中の表は検索できない

(2)チャンクの構成,状態,コメントを再編成前と同じにできる

項番1の,2.と3.の条件を満たす必要があります。

なお,カレントチャンクだけが再編成対象となる場合,カレントチャンクに格納されているデータ容量分の空き容量がデータ用DBエリアに必要になります。

11.4.14 マルチチャンク表を再編成する方法(チャンク単位で再編成する場合)」の「(2) 表の検索業務を停止して再編成をする場合」で説明している手順で再編成してください。

3

表全体

(1)再編成中の表を検索できる※1

(2)チャンクの構成,状態,コメントを再編成前と同じにできる

  1. データ用DBエリアの空き容量

    再編成前と再編成後の両方のデータを一時的に保持する必要があります。そのため,再編成対象の表のチャンクの最大データ容量と同じ空き容量がデータ用DBエリア内に必要です。

    例えば,表にチャンクが3つあり,それぞれのデータ容量が1TB,2TB,3TBの場合,データ用DBエリア内に3TBの空き容量が必要になります。

  2. 出力データファイルの出力先の容量

    チャンク単位でエクスポートするため,チャンクのデータをエクスポートする出力データファイルを格納できるディスク容量が必要です。

  3. 作業用一時ファイルの出力先の容量

    チャンク単位でデータをインポートするため,インポートの際に一時的に作成される作業用一時ファイルを格納できるディスク容量が必要です。

11.4.15 マルチチャンク表を再編成する方法(表全体を再編成する場合)」の「(1) 表の再編成後もチャンクの構成を同じにしたい場合」で説明している手順で再編成してください。

4

(1)再編成中の表は検索できない

(2)チャンクを1つにマージできる

  1. 出力データファイルの出力先の容量

    表の全データを一度にエクスポートします。表の全データをエクスポートする出力データファイルを格納できるディスク容量が必要です。

  2. 作業用一時ファイルの出力先の容量

    表の全データを一度にインポートします。表の全データをインポートする際に一時的に作成される作業用一時ファイルを格納できるディスク容量が必要です。

11.4.15 マルチチャンク表を再編成する方法(表全体を再編成する場合)」の「(2) 表の再編成後はデータを1つのチャンクにまとめてもよい場合」で説明している手順で再編成してください。

注※1

再編成の手順の1つで,PURGE CHUNK文を実行します。PURGE CHUNK文の実行中は,表を検索することはできません。

注※2

再編成対象のチャンクが2つあり,それぞれのデータ容量が1TB,2TBの場合,データ用DBエリア内に2TBの空き容量が必要になります。