列の使用状況を監視する方法を書いたので、ついでに索引も。
1. 索引のモニタリング開始
ALTER INDEX ... MONITORING USAGE; を実行して監視を有効にします。
SQL> ALTER INDEX TAB1_PK MONITORING USAGE;
索引が変更されました。
SQL> select * from v$object_usage;
INDEX_NAME TABLE_NAME MON USE START_MONITORING END_MONITORING
---------- ------------------------------ --- --- ------------------- -------------------
TAB1_PK TAB1 YES NO 04/02/2016 01:43:15
こんな感じ。
2. アプリケーションの実行
チェックしたいの処理を実行します。
3. 結果確認
1回以上、索引が使用されると v$object_usage.used 列が、YES になります。
SQL> select * from v$object_usage;
INDEX_NAME TABLE_NAME MON USE START_MONITORING END_MONITORING
---------- ------------------------------ --- --- ------------------- -------------------
TAB1_PK TAB1 YES YES 04/02/2016 01:43:15
4. モニタリング終了
SQL> ALTER INDEX TAB1_PK NOMONITORING USAGE;
索引が変更されました。
SQL> select * from v$object_usage;
INDEX_NAME TABLE_NAME MON USE START_MONITORING END_MONITORING
---------- ------------------------------ --- --- ------------------- -------------------
TAB1_PK TAB1 NO YES 04/02/2016 01:43:15 04/02/2016 01:45:03
v$object_usage.monitoring 列が、NO になっておしまい。
ちなみに、同じ索引のモニタリングをもう一度開始すると v$object_usage の情報がクリアされます。
・・・12.1 だと dba_object_usage に置き換わってるみたい。v$object_usage は非推奨です。知らなかった。
いまさらですが、検証はだいたい 11.2.0.4 、必要に応じて 12.1.0.2 を使ってます。