使っていない索引を調べる

システムによっては索引を無駄に作ってあって、一度も使用されたことがない索引がある場合もある。それを見つけるための手順をまとめておく。

  1. ALTER INDEX インデックス名 MONITORING USAGE で監視開始
  2. しばらく通常業務
  3. V$OBJECT_USAGE で結果を確認(USERDカラムがNOなら未使用)
  4. ALTER INDEX インデックス名 NOMONITORING USAGE で監視終了

これで調べることができるけど、1コマンド1索引(INDEX)しか調べられない。
面倒なので「ALTER INDEX インデックス名 MONITORING USAGE」を生成するスクリプトを作成。

  • Cドライブ直下にALTER INDEXコマンドが記載されたファイルが生成されます。*1
  • user_indexesを元に生成しているので、ログインユーザが作成したINDEXが対象です
  • 監視終了コマンドを生成するには青時部分を「NOMONITORING」に書き換えてください。
set pages 0
set feed off
set term off
set lines 500
set trimspool on
spool C:\monitoring_index.sql	

select 'ALTER INDEX '|| INDEX_NAME|| ' MONITORING USAGE;' from user_indexes;

spool off
set term on
set feed on
set pages 14
set lines 80

*1:クライアントがUNIXの人は赤字部分を書き換えてください