データの新しいサマリーテーブルの有用性をテストしようとしています。
そこで、特定の間隔のデータをフェッチする2つのプロシージャを作成しました。それぞれ、異なるテーブルソースを使用しています。したがって、C#コンソールアプリケーションでは、いずれかを呼び出すだけです。問題は、これを数回繰り返して応答時間のパターンを良くしたいときに始まります。
私はこのようなものを手に入れました:1199,84,81,81,81,81,82,80,80,81,81,80,81,91,80,80,81,80
おそらく私のOracle10gは不適切なキャッシュを作成しています。
どうすればこれを解決できますか?
EDIT:これを参照してください asktomのスレッド 、howとなぜこれをしないのか。
テスト環境にいる場合は、テーブルスペースをオフラインにしてから再びオンラインにすることができます。
ALTER TABLESPACE <tablespace_name> OFFLINE;
ALTER TABLESPACE <tablespace_name> ONLINE;
またはあなたは試すことができます
ALTER SYSTEM FLUSH BUFFER_CACHE;
ただし、これもテスト環境でのみです。
「実際の」システムでテストする場合、データがキャッシュされるため、最初の呼び出し(キャッシュされたデータを使用するもの)の後に得られる時間はより興味深い場合があります。プロシージャを2回呼び出し、後続の実行で得られるパフォーマンス結果のみを考慮します。
おそらく私の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は壁掛け時計よりも優れたチューニングエイドです。 詳細をご覧ください。