DB:Oracle 11g Enterprise Editoin 11.2.0.3.0
OS:Red Hat Enterprise Linux 5.6
当方環境にて下記の現象が発生しています。
調査結果から推測した原因が妥当なものなのか、
ご教示ください。
[事象]
過去2年間問題なく動作していたSQLが3ヶ月ほど前から
突然遅くなった。その後も元に戻ったり遅くなったり不安定な状態が
続いている。
調査の結果、通常時と遅い時と実行計画が変わっていることが判明。
該当のSQLはバッチ処理で実行されており、毎日複数回実行されている。
複数回のうち、特定の検索条件の場合のみ発生する。
[推測している原因]
・同じ条件を指定して単体で実行した場合は、遅くならない
・複数回実行し、初回実行時と遅くなる条件時とで対象件数が極端に差がある場合に、遅くなる
ことから、初回実行時の対象件数が少ない条件で生成された実行計画が共有プールに保存され、
2回目以降はそれが使用されることとなり、
大量件数が対象になった場合に、非効率な実行計画になってしまい、
遅延が発生していると推測しています。
この推測がOracleの仕様からみて正しいと考えられますでしょうか。
また、正しい場合、これを回避する方法はありますでしょうか。
よろしくお願いいたします。