2012-02-24 13 views
1

oracleの表の索引があり、使用されているかどうか、使用方法はわかりません。そのインデックスを使用するすべてのステートメントをログに記録する方法はありますか?そうでない場合、そのインデックスが使用されているかどうかを知る方法はありますか?oracleの索引で実行される文のログを取る方法は?

ありがとう、

+1

あなたの究極の目標は何ですか?つまり、なぜこれをやりたいのですか?どのインデックスが使用されているのか、どのインデックスが使用されていないのか調べようとしていますか?あなたのDBに多くのことが起こっているかのように、あなたの質問に答えるためにいくつかの本当に面倒なことをしなければならないかもしれませんし、それについてもっと簡単な方法があるかもしれません。 – Ben

+0

最終的に私はテーブルの特定のインデックスを削除できるかどうかを知る必要があります。 –

答えて

2

究極の目標を理解することは間違いありません。

あなたが共有プールに問い合わせるかを確認するためにGV$SQL_PLANテーブルを照会することができ、あなたのシステムに応じて、しかし、SQL文は特に長いあなたがそう共有プールに滞在しないことがあり

SELECT * 
    FROM gv$sql_plan 
WHERE object_owner = <<owner of object> 
    AND object_name = <<name of index>> 

特定のインデックスを使用していますあなたが何かを見逃さないように比較的頻繁にポーリングする必要があるかもしれません。 Oracleのバージョン、エディション、およびライセンスされたオプションによっては、AWRテーブルを照会して履歴の計画情報を取得することもできます。しかし、AWRスナップショットでキャプチャされるほど十分に高価だったクエリに関する情報しかないでしょう。

SELECT * 
    FROM dba_hist_sql_plan 
WHERE object_owner = <<owner of object> 
    AND object_name = <<name of index>> 

何を達成しようとしているのは、インデックスが使用されているかどうかを把握する場合には、しかし、あなたはおそらくindex monitoringのようなものを使用し、インデックスが使用されているOracleのトラックようにしたいです。しかし、このアプローチには落とし穴があることに注意してください。たとえば、効率的な削除に必要なindexes on foreign keysは、インデックス監視で使用されているとフラグされていない可能性があります(クエリプランだけでは検出されません)。インデックスのモニタリングでは、インデックス自体が使用されていないにもかかわらず、効率的な計画を策定するケースがありません。

+0

私の究極の目標は、生産に影響を与えないでインデックスを削除することです、私にその情報を与える別のツールがありますか? –

+0

@SeanNguyen - 最初に、文が特定のインデックスを使用していなくても、必ずしもリスクなしでドロップできるということを意味するわけではありません。索引に関する統計(または列が索引付けされているために収集された列に関する統計)が可能である可能性があります。あなたは潜在的にインデックスの監視(私の答えを更新)を使用することができますが、落とし穴があります。 –

+0

私のインデックスは空間インデックスです。ドメインインデックスを監視できるようには見えません。次はエラーです。SQLエラー:ORA-29871:ドメイン索引のalterオプションが無効です。 –

関連する問題