プロが教えるわが家の防犯対策術!

SELECTのSQLのパフォーマンスチューニングを行なっています。

例えば、A,B,Cと3本の候補があってA,B,Cの順に速度を見たいとき
B以降はAによるキャッシュを利用して実行するはずなので、
この3つの実行速度がうまく比較できません。
(頻繁に投げられるSQLではないので、アプリ側から投げられるときは
キャッシュにのっていない想定です)

SQLを投げるたびに
ALTER SYSTEM FLUSH BUFFER_CACHE ;
でキャッシュをクリアすれば、3つを比較できるのでしょうが、
運用上の問題でそれもできません。

理想としては
SELECT /*+ NOT_USE_CACHE*/ …
のようにヒント句や
alter sessionなどでキャッシュを使わずにSQLを投げたいのですが、
どのようにしたら実現できるでしょうか?

環境は
9iと11gの環境がありますので、
それぞれで最適な方法がございましたらご教授ください。

よろしくおねがいします。

A 回答 (3件)

1つ確認ですが、SQL-AとSQL-BとSQL-C、それぞれの処理速度を厳密に比較したいという事ですよね?



であれば、それぞれのSQLを実行する前に、DBを再起動する必要があると思います。
SQLを実行すれば、どうしてもデータはキャッシュにのってしまいます。
なので、DBを再起動して、完全にまっさらな状態にする必要があります。

「運用上それが出来ない」となれば、その環境と同じ環境を別に用意して、そこでテストを行うしか無いと思います。

ちなみに、No1の回答者さんが示したURLは、OracleBIを使用している場合の説明ですね。
    • good
    • 2

「システムのキャッシングの無効化」を行った場合、該当のSQL内でのキャッシングも無効になる影響は考えられませんか。


例えば、インデックスのRANGEスキャンを行う場合、通常ならルートやブランチブロックはキャシュされますが、キャッシングを全面的に無効にするとDISKアクセスが頻発する気がします。
    • good
    • 0

7.6.1.1 システムのキャッシングの無効化


http://docs.oracle.com/cd/E28389_01/bi.1111/b630 …

この辺は如何でしょうか。
ALTER SYSTEM FLUSH BUFFER_CACHE;
が使えない理由が、キャッシュを後で使うから、とかであった場合、
この方法で一時的にキャッシュ無効化⇒後で有効化でいける気がします。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A