11.3.2 B-treeインデクスの再作成
B-treeインデクスを定義した表に対して,行の挿入,行の更新,および行の削除を頻繁に実施した場合は,B-treeインデクスを再作成することを検討してください。
B-treeインデクスを再作成すると,次に示す効果があります。
-
B-treeインデクスを使用した検索性能の低下を防ぐことができる
-
データ用DBエリアの使用量を削減できる(行の更新や行の削除で発生した無効な状態のB-treeインデクスのデータを削除できる)
-
インデクスページスプリットの発生を抑えることができる(B-treeインデクスのインデクスページ内の未使用領域を再度確保できる)
B-treeインデクスを再作成する場合は,adbidxrebuildコマンドを実行してください。adbidxrebuildコマンドについては,マニュアルHADB コマンドリファレンスのadbidxrebuild(インデクスの再作成)を参照してください。
- メモ
-
-
未完状態になったB-treeインデクスを再作成したい場合は,「16.9.1 B-treeインデクスが未完状態になったときの対処方法」を参照してください。
-
一意性制約に違反したユニークインデクスを再作成した場合は,「16.9.2 一意性制約に違反した場合の対処方法(KFAA61205-Wメッセージが出力された場合)」を参照してください。
-
B-treeインデクスを再作成するかどうかを判断する方法について,次に示します。
- 〈この項の構成〉
(1) B-treeインデクスを使用した検索性能の低下を防ぐ場合
B-treeインデクスを定義した表に対して,行の挿入,行の更新,または行の削除を頻繁に実施した場合は,B-treeインデクスを使用した検索性能が低下します。
その場合は,次に示す出力項目のうち,どちらか片方を確認してください。確認した結果,出力項目の値が大きい場合は,B-treeインデクスを再作成してください。B-treeインデクスを再作成すると,B-treeインデクスを使用した検索性能の低下を防ぐことができます。
-
SQL文の統計情報に出力されるBidx_validation_check_cntの値(B-treeインデクスを使用した検索で,行データが有効かどうかを判定した回数)
SQL文の統計情報は,統計ログファイルおよびSQLトレースファイルに出力されます。
統計ログファイルに出力されたSQL文の統計情報を確認する場合は,adbstatコマンドを実行してください。adbstatコマンドについては,マニュアルHADB コマンドリファレンスのadbstat(HADBサーバの統計解析)を参照してください。
SQLトレースファイルに出力されたSQL文の統計情報を確認する場合は,SQLトレースファイル中のSQLトレース情報を確認してください。SQLトレース情報については,「10.11.2 SQLトレース情報に出力される情報」の「(10) SQL文の統計情報」を参照してください。
-
アクセスパスの統計情報のデータアクセス情報に出力されるData_bidx_validation_check_cntの値(B-treeインデクスを使用した検索で,行が有効かどうかを判定した回数)
アクセスパスの統計情報は,SQLトレースファイルに出力されます。SQLトレースファイル中のSQLトレース情報を確認してください。アクセスパスの統計情報については,「10.11.3 アクセスパスの統計情報の出力例と出力項目」を参照してください。
SQL文の統計情報とアクセスパスの統計情報の両方を確認できる場合は,アクセスパスの統計情報を確認することを推奨します。アクセスパスの統計情報を確認すると,複数の表を検索している場合に,どの表に定義したB-treeインデクスを再作成すればよいかを確認できます。
(2) データ用DBエリアの使用量を削減する場合
B-treeインデクスを定義した表に対して,行の更新,または行の削除を頻繁に実施した場合は,次に示す手順に従って,B-treeインデクスを再作成するかどうかを判断してください。
手順
-
adbdbstatusコマンドでB-treeインデクスの使用量を確認する
adbdbstatusコマンドで,インデクスのサマリ情報を出力してください。そして,Used_segments(インデクスの使用中セグメント数)の出力内容を確認してください。adbdbstatusコマンドについては,マニュアルHADB コマンドリファレンスのadbdbstatus(データベースの状態解析)を参照してください。
-
実表内の有効なデータを基に見積もったB-treeインデクスの容量を確認する
B-treeインデクスの容量を求める場合は,「5.8.1 データ用DBエリアの総ページ数の求め方」の「(2) 変数の説明」にある次の個所を参照してください。なお,表の種類によって参照先が異なります。
-
シングルチャンク表の場合
-
マルチチャンク表の場合
なお,変数SGIDXは,データ用DBエリアに格納されているすべてのB-treeインデクスの合計を求める計算式となっています。ここでは,対象のB-treeインデクスだけを求めてください。
-
手順1.および手順2.で確認した結果を比較して,その差が大きい場合は,B-treeインデクスを再作成してください。
(3) B-treeインデクスのインデクスページスプリットの発生を抑える場合
B-treeインデクスを定義した表に対して,行の挿入,または行の更新を頻繁に実施した場合は,インデクスページスプリットが発生するおそれがあります。
インデクスページスプリットの発生有無については,SQL文の統計情報のBidx_page_split_cnt(B-treeインデクスのインデクスページスプリットが発生した回数)を確認してください。確認した結果,インデクスページスプリットが発生している場合は,B-treeインデクスを再作成してください。B-treeインデクスを再作成すると,インデクスページ内の未使用領域を再度確保できるため,インデクスページスプリットの発生を抑えることができます。
SQL文の統計情報は,統計ログファイルおよびSQLトレースファイルに出力されます。
統計ログファイルに出力されたSQL文の統計情報を確認する場合は,adbstatコマンドを実行してください。adbstatコマンドについては,マニュアルHADB コマンドリファレンスのadbstat(HADBサーバの統計解析)を参照してください。
SQLトレースファイルに出力されたSQL文の統計情報を確認する場合は,SQLトレースファイル中のSQLトレース情報を確認してください。SQLトレース情報については,「10.11.2 SQLトレース情報に出力される情報」の「(10) SQL文の統計情報」を参照してください。