2017/12/07

ORACLEの運用において、ハイウォーターマーク(HWM)を把握する必要があります。
UPDATEやDELETEの繰り返しで、断片化が発生し、検索時間が無駄にかかってしまうことがあるためです。
本記事では、HWMの把握方法を紹介します。
sponsored link
HWMの把握方法
ハイウォーターマーク(HWM)を把握するためには、静的データディクショナリビューを検索します。
テーブルのHWMを確認するためには、USER_TABLES、ALL_TABLES、DBA_TABLESを検索します。
インデックスのHWMを確認するためには、USER_INDEXES、ALL_INDEXES、DBA_INDEXESを検索します。
また、パーティション分割されているテーブルのパーティションごとのHWMを確認するためには、USER_TAB_PARTITIONS、ALL_TAB_PARTITIONS、DBA_TAB_PARTITIONSを検索します。
同様に、パーティション分割されているインデックスのパーティションごとのHWMを確認するためには、USER_IND_PARTITIONS、ALL_IND_PARTITIONS、DBA_IND_PARTITIONSを検索します。
USER_*****は、接続しているユーザーに属するテーブル・インデックスの情報を確認できます。
ALL_*****は、接続しているユーザーがアクセスできるテーブル・インデックスの情報を確認できます。
DBA_*****は、全テーブル・インデックスの情報を確認できますが、DBAロールが付与されているユーザーでないと検索できません。
また、注意点として事前に統計情報が取得されている必要があります。
テーブルのHWMの把握方法
以下、テーブルのHWMの把握するための、具体的な検索SQLとサンプルの出力結果です。
TABLE_NAMEには、テーブル名が入ります。
PARTITION_NAMEには、パーティション名が入ります。
BLOCKSには、HWMを示すデータが格納されている領域(ORACLEブロック単位)が入ります。
インデックスのHWMの把握方法
以下、インデックスのHWMの把握するための、具体的な検索SQLとサンプルの出力結果です。
INDEX_NAMEには、インデックス名が入ります。
PARTITION_NAMEには、パーティション名が入ります。
LEAF_BLOCKSには、リーフブロック領域(ORACLEブロック単位)が入ります。
インデックスは、リーフブロックのみの確認となります。
他にルートブロックやブランチブロックもインデックス領域の構成要素ですが、リーフブロックが占める割合が大きいので、目安としてはリーフブロックの確認のみで問題ないケースが多いです。
注意点
注意点としては、上で少し触れましたが、事前に該当テーブル・インデックスの統計情報を取得が必要です。
以下、SQLPLUSから統計情報を取得するコマンドのサンプルです。
まとめ
本記事では、HWMの把握方法を紹介しました。
検索に想定よりも時間がかかっている場合、データの更新と削除の繰り返しで、領域が断片化している可能性があります。
上記ディクショナリビューを検索し、HWMを確認してみましょう。