11.4.13 マルチチャンク表の再編成が必要かどうかを確認する方法
マルチチャンク表の再編成が必要かどうかを確認する方法について説明します。
- メモ
-
-
シングルチャンク表の再編成が必要かどうかを確認する方法については,「11.1.12 シングルチャンク表の再編成が必要かどうかを確認する方法」を参照してください。
-
アーカイブ状態のチャンクについては,データの再編成は不要です。
-
(1) 表の再編成が必要な理由
マルチチャンク表に対して,次の操作を繰り返し実行すると,表の検索性能やデータの格納効率が低下します。
-
DELETE文による行の削除
-
UPDATE文による行の更新
-
INSERT文による行の挿入
-
adbimportコマンドによる少量データのバックグラウンドインポート
この場合,マルチチャンク表を再編成すると,データ用DBエリア内のむだな空き領域が解放されて,表の検索性能やデータの格納効率が向上します。
マルチチャンク表の検索性能やデータの格納効率が低下する理由を次に示します。
- マルチチャンク表がローストア表の場合
-
シングルチャンク表の場合と理由は同じです。理由については,「11.1.12 シングルチャンク表の再編成が必要かどうかを確認する方法」の「(1) 表の再編成が必要な理由」の「シングルチャンク表がローストア表の場合」を参照してください。
- マルチチャンク表がカラムストア表の場合
-
シングルチャンク表の場合と理由は同じです。理由については,「11.1.12 シングルチャンク表の再編成が必要かどうかを確認する方法」の「(1) 表の再編成が必要な理由」の「シングルチャンク表がカラムストア表の場合」を参照してください。
- ローストア表,カラムストア表共通の理由
-
マルチチャンク表に対して,adbimportコマンドによる少量データのバックグラウンドインポートを繰り返し実行すると,空き領域の一部が使用されなくなるおそれがあります。この使用されない空き領域は再利用されません(むだな空き領域になります)。その結果,データの格納効率が悪くなり,表の検索性能が低下します。
(2) 再編成が必要かどうかを確認する方法
マルチチャンク表の再編成が必要かどうかを確認する方法を説明します。
マルチチャンク表がローストア表で,SQL文による行の更新,削除を繰り返した場合は,「(a) マルチチャンク表がローストア表の場合」を参照して,表の再編成が必要かどうかを確認してください。
マルチチャンク表がカラムストア表で,SQL文による行の追加,更新,削除を繰り返した場合は,「(b) マルチチャンク表がカラムストア表の場合」を参照して,表の再編成が必要かどうかを確認してください。
表に対してadbimportコマンドによる少量データのバックグラウンドインポートを繰り返した場合は,「(c) 少量のデータをバックグラウンドインポートで繰り返し追加した場合」を参照して,表の再編成が必要かどうかを確認してください。
(a) マルチチャンク表がローストア表の場合
データの格納効率を計算してください。データの格納効率が悪い場合は,マルチチャンク表の再編成を実行してください。データの格納効率はチャンク単位で確認します。手順を次に示します。
手順
-
現在のチャンクが使用しているセグメント数を確認する
adbdbstatusコマンドで,使用量情報を出力してください。そして,Chunk_ID(チャンクID)をキーにして,Used_segments(使用中セグメント数)を確認してください。adbdbstatusコマンドについては,マニュアルHADB コマンドリファレンスのadbdbstatus(データベースの状態解析)を参照してください。
-
現在のチャンク内のデータ件数を基に,データ用DBエリアのセグメント数を求める
現在のチャンク内のデータ件数を確認したあとで,データ用DBエリアのセグメント数を求めてください。
現在のチャンク内のデータ件数は,adbsqlコマンドのサブコマンド#GETCOUNTで確認できます。手順1.で確認したチャンクIDを使用して,adbsqlサブコマンド#GETCOUNTを実行してください。adbsqlコマンドについては,マニュアルHADB コマンドリファレンスのadbsql(SQLの実行)を参照してください。
データ用DBエリアのセグメント数を求める場合は,「5.8.1 データ用DBエリアの総ページ数の求め方」の「(2) 変数の説明」の「(f) 変数SGROWTBLおよびPGROWTBLの求め方(マルチチャンク表の場合)」を参照してください。
なお,変数SGROWTBLは,データ用DBエリアに格納されている全マルチチャンク表の全チャンクの合計を求める計算式となっています。ここでは,対象表の対象チャンクだけを求めてください。
-
求めた結果を基に,データの格納効率を求める
手順1.および手順2.で求めた結果を基に,チャンク内のデータの格納効率を求めてください。計算式を次に示します。
計算式
上記の計算結果が0に近い場合,データの格納効率が悪いため,そのチャンクを再編成してください。再編成の運用方法は幾つかあるため,「(3) 再編成方法の選択」を参照して,再編成の運用方法を決めてください。
(b) マルチチャンク表がカラムストア表の場合
adbdbstatusコマンドを実行して再編成要否の情報を確認し,マルチチャンク表の再編成をするかどうかを決めてください。確認手順を次に示します。
手順
-
-d reorginfoオプションを指定したadbdbstatusコマンドを実行して,再編成要否の情報を出力する
-
再編成要否の情報のReorganization_necessity(再編成要否)の出力内容を確認する
-
Recommendedが出力されている場合
Recommendedが出力されたチャンクの再編成を実行してください。再編成の運用方法は幾つかあるため,「(3) 再編成方法の選択」を参照して,再編成の運用方法を決めてください。
-
Not_recommendedが出力されている場合
Not_recommendedが出力されたチャンクは再編成する必要はありません。
-
adbdbstatusコマンドについては,マニュアルHADB コマンドリファレンスのadbdbstatus(データベースの状態解析)を参照してください。
(c) 少量のデータをバックグラウンドインポートで繰り返し追加した場合
データの格納効率を計算してください。データの格納効率が悪い場合は,マルチチャンク表の再編成を実行してください。格納効率を求める計算式を次に示します。
計算式
格納効率=page_num÷(segment_num×segment_size)
上記の計算式で求めた結果が1に近いほど,チャンク内のデータの格納効率が良いと判断できます。逆に,0に近いほど,チャンク内のデータの格納効率が悪いと判断できます。0に近い場合は,マルチチャンク表の再編成を実行してください。
変数の説明
- page_num
-
インポート対象の表またはチャンクの使用中ページ数
-
表の使用中ページ数を確認する場合は,adbdbstatusコマンドで,表のサマリ情報を出力してください。表のサマリ情報のUsed_pagesの内容を確認してください。
-
チャンクの使用中ページ数を確認する場合は,-d usedオプションを指定したadbdbstatusコマンドを実行してください。DBエリア,表とインデクスの使用量情報を出力できます。DBエリア,表とインデクスの使用量情報から,格納効率を確認したいチャンクのChunk_IDをキーにして,Used_pagesの内容を確認してください。
-
- segment_num
-
インポート対象の表またはチャンクの使用中セグメント数
-
表の使用中セグメント数を確認する場合は,adbdbstatusコマンドで,表のサマリ情報を出力してください。表のサマリ情報のUsed_segmentsの内容を確認してください。
-
チャンクの使用中セグメント数を確認する場合は,-d usedオプションを指定したadbdbstatusコマンドを実行してください。DBエリア,表とインデクスの使用量情報を出力できます。DBエリア,表とインデクスの使用量情報から,格納効率を確認したいチャンクのChunk_IDをキーにして,Used_segmentsの内容を確認してください。
-
- segment_size
-
インポート対象の表を格納しているDBエリアのセグメントサイズ(1セグメントのページ数)
- 重要
-
使用中セグメントが1つだけのチャンクを再編成しても,データの格納効率は向上しません。再編成対象のチャンクの使用中セグメント数が1,または1に近い場合は,次のどちらかの方法でデータを再編成してください。
-
複数のチャンクをマージしたあとに,「11.4.14 マルチチャンク表を再編成する方法(チャンク単位で再編成する場合)」の手順に従って,マージ後のチャンクを再編成する
-
「11.4.15 マルチチャンク表を再編成する方法(表全体を再編成する場合)」の「(2) 表の再編成後はデータを1つのチャンクにまとめてもよい場合」の手順に従って,マルチチャンク表全体を再編成する
-
(3) 再編成方法の選択
マルチチャンク表の再編成方法には,次の表に示すとおり,幾つかの方法があります。条件に合った方法を選択してください。
- 重要
-
マルチチャンク表全体を再編成した場合(特にデータ件数が多い場合),再編成に時間が掛かるおそれがあります。そのため,マルチチャンク表全体を再編成するのではなく,チャンク単位での定期的な再編成を推奨します(次の表に示す項番1の方法を推奨します)。
項番 |
再編成の実行単位 |
表の検索要否,チャンクの構成 |
再編成の実行時に必要な条件 |
再編成の方法 |
---|---|---|---|---|
1 |
チャンク単位 |
(1)再編成中の表を検索できる※1 (2)チャンクの構成,状態,コメントを再編成前と同じにできる |
|
「11.4.14 マルチチャンク表を再編成する方法(チャンク単位で再編成する場合)」の「(1) 表の検索業務を継続した状態で再編成をする場合」で説明している手順で再編成してください。 |
2 |
(1)再編成中の表は検索できない (2)チャンクの構成,状態,コメントを再編成前と同じにできる |
項番1の,2.と3.の条件を満たす必要があります。 なお,カレントチャンクだけが再編成対象となる場合,カレントチャンクに格納されているデータ容量分の空き容量がデータ用DBエリアに必要になります。 |
「11.4.14 マルチチャンク表を再編成する方法(チャンク単位で再編成する場合)」の「(2) 表の検索業務を停止して再編成をする場合」で説明している手順で再編成してください。 |
|
3 |
表全体 |
(1)再編成中の表を検索できる※1 (2)チャンクの構成,状態,コメントを再編成前と同じにできる |
|
「11.4.15 マルチチャンク表を再編成する方法(表全体を再編成する場合)」の「(1) 表の再編成後もチャンクの構成を同じにしたい場合」で説明している手順で再編成してください。 |
4 |
(1)再編成中の表は検索できない (2)チャンクを1つにマージできる |
|
「11.4.15 マルチチャンク表を再編成する方法(表全体を再編成する場合)」の「(2) 表の再編成後はデータを1つのチャンクにまとめてもよい場合」で説明している手順で再編成してください。 |
- 注※1
-
再編成の手順の1つで,PURGE CHUNK文を実行します。PURGE CHUNK文の実行中は,表を検索することはできません。
- 注※2
-
再編成対象のチャンクが2つあり,それぞれのデータ容量が1TB,2TBの場合,データ用DBエリア内に2TBの空き容量が必要になります。