オーバーコンティングとは、オプティマイザが生成した実行計画が特定のデータセットに対して最適であるため、計画キャッシュに格納されることを指します。しかし、その後のデータセットに対しては最適ではなくなり、結果としてSQLリクエストの実行時間が増加し、スループットが低下することを意味します。
以下のシナリオを考えてみましょう:
あるテーブルにユーザー次元の注文情報が保存されており、各レコードにはユーザーIDと注文IDの2つのフィールドがあります。ユーザーIDと注文IDにそれぞれインデックスが作成されています。
この問題に対しては、以下の方法で解決できます:
プランキャッシュのリフレッシュ:この操作は、計画キャッシュ内の計画をクリアし、ハードパースをトリガーして新しい実行計画を生成しますが、依然として非最適な実行計画が生成される可能性があります。
実行計画のバインディング:
CREATE OUTLINEステートメントを使用して、ターゲットSQLに計画をバインドします。
詳細については、SQL FAQ の SQLクエリの「オーバーコンティング」問題の解決方法 の章と、SQLチューニングの典型的なシナリオとケース の オーバーコンティング の章を参照してください。