web-dev-qa-db-ja.com

Oracleのすべてのキャッシュされたアイテムをクリアする方法

OracleデータベースでSQLクエリをチューニングしています。誤解を招くパフォーマンス結果を防ぐために、各クエリを実行する前に、キャッシュされたすべてのアイテムが確実にクリアされるようにします。次のコマンドを実行して、共有プール(キャッシュされたSQL/explainプランを削除するため)とバッファーキャッシュ(キャッシュされたデータを削除するため)をクリアします。

alter system flush buffer_cache;
alter system flush shared_pool;

私がやるべきことはまだありますか、これで十分ですか?

ありがとう!

32
Kevin Babcock

共有プールをフラッシュするとうまくいきますが、Tom Kyteがいくつかのケースで期待する結果が得られない理由を以下にリストします。

http://asktom.Oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:634939141109

8
Doug Porter

オペレーティングシステムとハードウェアもキャッシュを行うため、結果が歪む可能性があることに注意してください。

4
Daniel Emge

スキーマまたはデータベース全体の統計情報も収集する必要があります。

begin
   dbms_stats.gather_schema_stats('schema_name');
end;

または

begin
   dbms_stats.gather_database_stats;
end;

そして、共有プールをクリアします。

3
PenFold

私はあなたが誤解を招く結果を提示していると主張しますbecauseあなたはすべてのキャッシュをクリアしました。現実世界のデータベースは、その人生で一度しかその状態にありません。実際、パフォーマンステストを行う場合、キャッシュ(およびその他の最適化)の利点を確認できるように、クエリを複数回実行することは一般的に受け入れられています。

1
BobC