10.1.6 シングルチャンク表のデータを再編成する方法
シングルチャンク表に対して,DELETE文による行の削除を実行すると,削除対象の行データは無効となります。また,UPDATE文による行の更新を実行すると,更新後の行データが新たな行として追加されて,更新前の行データは無効となります。無効となった行データは,ディスクからは削除されません。
行の削除および行の更新を繰り返し実行した場合,表内に無効な行データが増加します。無効な行データが増加すると,次のような影響があります。
-
無効な行データが増加した影響で,データの格納効率が悪くなる
-
検索時に参照するページ数が増えるため,検索性能が低下する
行の削除および行の更新を繰り返し実行した場合,データの格納効率を確認して,表のデータを再編成することを検討してください。
- 参考
-
マルチチャンク表のデータを再編成する場合は,「10.4.14 マルチチャンク表のデータを再編成する方法」を参照してください。
- 〈この項の構成〉
(1) データの格納効率を求める
表のデータを再編成する前に,データの格納効率を確認します。データの格納効率が悪い場合は,データを再編成してください。データの格納効率は,次の計算式で求めてください。
計算式
|
|
- 変数の説明
-
A:表の行数
B:無効行数
計算式で求めた結果が1に近いほど,データの格納効率が良いと判断できます。逆に,0に近いほど,データの格納効率が悪いと判断できます。0に近い場合は,「10.1.6(2) データを再編成する」を参照して,表のデータを再編成してください。
変数AおよびBについては,次に示す手順で求めてください。
■手順(変数AおよびBの求め方)
-
SQLトレース情報が出力される設定になっていることを確認する
SQLトレース情報のアクセスパスの統計情報が出力されていることを確認してください。アクセスパスの統計情報が出力されているかどうかは,SQLトレース機能に関するサーバ定義の指定で確認できます。詳細については,「9.10.5(2) サーバ定義を指定する」を参照してください。
-
次のSELECT文を実行する
SELECT COUNT(*) FROM "表名" /*>> WITHOUT INDEX <<*/
上記のSELECT文の実行結果が,表の行数(変数Aの値)になります。
-
アクセスパスの統計情報を確認する
手順2.で実行したSELECT文に対するアクセスパスの統計情報を確認してください。アクセスパスの統計情報の「Data_deleted_rows_cnt」の値を確認します。この値が,無効行数(変数Bの値)になります。
なお,無効行数(変数Bの値)がわからない場合は,次の手順で,データの格納効率を求めてください。
■手順(変数Bの値がわからない場合)
-
表の使用中セグメント数を確認する
adbdbstatusコマンドで,表のサマリ情報を出力してください。そして,Used_segments(表の使用中セグメント数)の出力内容を確認してください。adbdbstatusコマンドについては,マニュアル「HADB コマンドリファレンス」の「adbdbstatus(データベースの状態解析)」を参照してください。
-
表の行数を基に,データ用DBエリアのセグメント数を求める
表の行数を求めたあとで,データ用DBエリアのセグメント数を求めてください。表の行数を求める場合は,上記にある変数Aの説明を参照してください。
データ用DBエリアのセグメント数を求める場合は,「5.8.1 データ用DBエリアの総ページ数の求め方」にある「SGTBL(シングルチャンク表の場合)」を参照してください。なお,変数SGTBLは,データ用DBエリアに格納されているすべての表の合計を求める計算式となっています。ここでは,対象表だけを求めてください。また,表の行数は,変数SGTBLにある変数BP(i)および変数VP(i)で使用します。
-
求めた結果を基に,データの格納効率を求める
手順1.および手順2.で求めた結果を基に,データの格納効率を求めてください。計算式を次に示します。
計算式
求めた結果,0に近い場合は,表のデータを再編成してください。
(2) データを再編成する
データの格納効率が悪い場合は,表のデータを再編成してください。表のデータを再編成する手順について,次に示します。
手順
-
表のデータをエクスポートする
adbexportコマンドで,表のデータをエクスポートしてください。
adbexportコマンドについては,マニュアル「HADB コマンドリファレンス」の「adbexport(データのエクスポート)」を参照してください。
-
エクスポートしたデータを作成モードでインポートする
adbimportコマンドに-dオプションを指定して,手順1.でエクスポートしたデータをインポートしてください。-dオプションを指定すると,作成モードでインポートされます(表の既存データをすべて削除してから,手順1.でエクスポートしたデータがインポートされます)。
adbimportコマンドについては,マニュアル「HADB コマンドリファレンス」の「adbimport(データのインポート)」を参照してください。
エクスポートしたデータを作成モードでインポートすると,データの再編成が完了します。