10.4.14 マルチチャンク表のデータを再編成する方法
マルチチャンク表に対して,次の操作を繰り返し実行した場合は,無効な行データや余分な空き領域が増加します。
-
DELETE文による行の削除
-
UPDATE文による行の更新
-
adbmergechunkコマンドによる複数チャンクのマージ
無効な行データや余分な空き領域が増加すると,データの格納効率が悪くなり,検索性能が低下します。そのため,データの格納効率を確認して,マルチチャンク表のデータをチャンク単位に再編成することを検討してください。
- 参考
-
-
シングルチャンク表に格納したデータを再編成する場合は,「10.1.6 シングルチャンク表のデータを再編成する方法」を参照してください。
-
アーカイブ状態のチャンクについては,データの再編成は不要です。
-
(1) チャンク内のデータの格納効率を求める
マルチチャンク表のデータをチャンク単位に再編成する前に,チャンク内のデータの格納効率を確認します。データの格納効率が悪い場合は,データをチャンク単位に再編成してください。データの格納効率は,次の手順で求めてください。
手順
-
現在のチャンクが使用しているセグメント数を確認する
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エリアの総ページ数の求め方」にある「SGTBL(マルチチャンク表の場合)」を参照してください。なお,変数SGTBLは,データ用DBエリアに格納されている全マルチチャンク表の全チャンクの合計を求める計算式となっています。ここでは,対象表の対象チャンクだけを求めてください。
-
求めた結果を基に,データの格納効率を求める
手順1.および手順2.で求めた結果を基に,チャンク内のデータの格納効率を求めてください。計算式を次に示します。
計算式
求めた結果,0に近い場合は,マルチチャンク表のデータをチャンク単位に再編成してください。
(2) チャンク単位にデータを再編成する
データの格納効率が悪い場合は,マルチチャンク表のデータをチャンク単位に再編成してください。手順を次に示します。
手順
-
マルチチャンク表のデータをチャンク単位にエクスポートする
-cオプションを指定したadbexportコマンドで,マルチチャンク表のデータをチャンク単位にエクスポートしてください。チャンク単位にエクスポートする方法については,「10.4.6 チャンク単位にデータをエクスポートする方法」を参照してください。
-
エクスポートしたデータを,待機状態のチャンクとしてバックグラウンドインポートする
adbimportコマンドに-bオプションおよび--status waitオプションを指定して,手順1.でエクスポートしたデータをバックグラウンドインポートしてください。--status waitオプションを指定すると,待機状態のチャンクが作成されてデータが格納されます。
待機状態のチャンクを作成するバックグラウンドインポートについては,「10.4.5 マルチチャンク表にインポートするデータを一時的に検索対象外にする方法(待機状態のチャンクの作成)」を参照してください。
-
チャンクの状態を変更する
手順1.でエクスポートしたデータを管理するチャンク(再編成対象のチャンク)を,adbchgchunkstatusコマンドに-wオプションを指定して,通常状態のチャンクから待機状態のチャンクに変更してください。
また,手順2.でバックグラウンドインポートした待機状態のチャンクを,adbchgchunkstatusコマンドに-nオプションを指定して,通常状態のチャンクに変更してください。
チャンクの状態を変更する方法については,「10.4.13 チャンクの状態を変更する方法」を参照してください。
-
再編成対象のチャンクを削除する
手順3.で待機状態のチャンクに変更した再編成対象のチャンクを,PURGE CHUNK文で削除してください。
PURGE CHUNK文でチャンクを削除する方法については,「10.4.7 チャンク単位にデータを削除する方法」を参照してください。
再編成対象のチャンク内のデータをバックグラウンドインポートで格納し直すことで,マルチチャンク表のデータの再編成が完了します。