web-dev-qa-db-ja.com

パフォーマンステストのためにOracleキャッシュを無効にする方法

データの新しいサマリーテーブルの有用性をテストしようとしています。

そこで、特定の間隔のデータをフェッチする2つのプロシージャを作成しました。それぞれ、異なるテーブルソースを使用しています。したがって、C#コンソールアプリケーションでは、いずれかを呼び出すだけです。問題は、これを数回繰り返して応答時間のパターンを良くしたいときに始まります。

私はこのようなものを手に入れました:1199,84,81,81,81,81,82,80,80,81,81,80,81,91,80,80,81,80

おそらく私のOracle10gは不適切なキャッシュを作成しています。

どうすればこれを解決できますか?

16
Custodio

EDIT:これを参照してください asktomのスレッドhowなぜこれをしないのか

テスト環境にいる場合は、テーブルスペースをオフラインにしてから再びオンラインにすることができます。

ALTER TABLESPACE <tablespace_name> OFFLINE;
ALTER TABLESPACE <tablespace_name> ONLINE;

またはあなたは試すことができます

ALTER SYSTEM FLUSH BUFFER_CACHE;

ただし、これもテスト環境でのみです。

「実際の」システムでテストする場合、データがキャッシュされるため、最初の呼び出し(キャッシュされたデータを使用するもの)の後に得られる時間はより興味深い場合があります。プロシージャを2回呼び出し、後続の実行で得られるパフォーマンス結果のみを考慮します。

10
Peter Lang

おそらく私のOracle10gは不適切なキャッシュを作成しています。

実際、Oracleは完全に適切なキャッシュを実行しているようです。これらのテーブルが頻繁に使用される場合は、ほとんどの場合、それらをキャッシュに入れておきたいと思うでしょう。

編集

ピーターの反応についてのコメントでルイスは言った

電話の前にフラッシュすると、1370,354,391,375,352,511,390,375,326,335,435,334,334,328,337,314,417,377,384,367,393のような興味深い結果が得られました。

フラッシュは、行がDBキャッシュにある場合よりも呼び出しに少し時間がかかるが、最初の呼び出しほど長くはかからないことを意味するため、これらの調査結果は「興味深い」ものです。これは、サーバーが物理レコードを物理キャッシュに保存しているためです。これを回避する唯一の方法は、空のキャッシュに対して真に実行するために、すべてのテストの前にサーバーを再起動することです。

または、クエリを適切に調整する方法を学びます。 データベースの仕組み を理解することは良いスタートです。そして、EXPLAINPLANは壁掛け時計よりも優れたチューニングエイドです。 詳細をご覧ください。

6
APC