1

本番環境でパフォーマンスの問題が発生しました。

Oracle が正しくないインデックスを使用してクエリを実行していることを確認しました。

クエリの WHERE 句には、主キーのすべての列があります (他には何もありません)。

Index and Gather Statistics の再構築後、Oracle は PK_INDEX の使用を開始しました。そして、実行計画は Index Unique Scan を示しました。

しばらくは正常に機能していましたが、Oracle は間違ったインデックスを再び使用し始めました。現在使用されているインデックスは、クエリの WHERE 句に表示される 2 つの列で構成されています。現在、実行計画は INDEX RANGE SCAN を示しており、システムは非常に低速です。

この問題の根本にたどり着く方法を教えてください。

4

1 に答える 1

4

もう一度統計を収集してみてください。予想される実行計画が得られた場合、最後の統計収集以降にテーブルに加えられた変更により、オラクルは最も好まれていない実行計画の方が優れていると判断したことを意味します。

ですから、ここでの質問は、「計画の安定性を維持するにはどうすればよいですか?」ということです。

いくつかのオプションがあります

  1. クエリでヒントを使用して、正確なアクセス パスを示します。
  2. アウトラインを使用する

個人的には、これら 2 つのアプローチは好きではありません。将来、データが変更されて実行計画が変更されると、パフォーマンスが低下するからです。

したがって、3番目のオプション(および私の個人的なお気に入り)は

  1. 定期的な統計収集を有効にします。オラクルは、変更を特定し、関連する統計を段階的に更新することを知っています。
于 2013-08-21T05:20:07.740 に答える