OracleデータベースでSQLクエリをチューニングしています。誤解を招くパフォーマンス結果を防ぐために、各クエリを実行する前に、キャッシュされたすべてのアイテムが確実にクリアされるようにします。次のコマンドを実行して、共有プール(キャッシュされたSQL/explainプランを削除するため)とバッファーキャッシュ(キャッシュされたデータを削除するため)をクリアします。
alter system flush buffer_cache;
alter system flush shared_pool;
私がやるべきことはまだありますか、これで十分ですか?
ありがとう!
共有プールをフラッシュするとうまくいきますが、Tom Kyteがいくつかのケースで期待する結果が得られない理由を以下にリストします。
http://asktom.Oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:634939141109
オペレーティングシステムとハードウェアもキャッシュを行うため、結果が歪む可能性があることに注意してください。
スキーマまたはデータベース全体の統計情報も収集する必要があります。
begin
dbms_stats.gather_schema_stats('schema_name');
end;
または
begin
dbms_stats.gather_database_stats;
end;
そして、共有プールをクリアします。
私はあなたが誤解を招く結果を提示していると主張しますbecauseあなたはすべてのキャッシュをクリアしました。現実世界のデータベースは、その人生で一度しかその状態にありません。実際、パフォーマンステストを行う場合、キャッシュ(およびその他の最適化)の利点を確認できるように、クエリを複数回実行することは一般的に受け入れられています。