1

私は Oracle 10G と Oracle SQL 開発者バージョン 3 を使用しています。Oracle がクエリの結果をどこかに保存/キャッシュするかどうかを知りたかったので、次に同じパラメーターを使用して同じクエリを実行すると、データの取得にかかる時間が短くなります。スクリプトを初めて実行するときよりも。

その場合、それらの結果をキャッシュする期間はどれくらいですか?

select SQL スクリプトを実行しようとしましたが、それを 3 回繰り返した後、データの取得と表示にかかる時間がほぼ半分に短縮されました。しかし、別のデータベースで同じスクリプトを実行すると、何度か繰り返しても変更がないように見えることがあります。

4

2 に答える 2

4

OracleはSQLステートメントをライブラリキャッシュにキャッシュします。ステートメントを複数回実行する場合(同じバインド変数値が使用されているかどうかに関係なく)、Oracleはライブラリキャッシュ内のデータを使用して、SQLステートメントを再解析して新しいクエリプランを生成する必要をなくします。ただし、個々のクエリの調整を検討している場合、このキャッシュがパフォーマンスに大きな影響を与える可能性はほとんどありません。SQLステートメントの解析とクエリプランの生成は、通常、非常に迅速なプロセスです。

Oracleは、データブロックもバッファキャッシュにキャッシュします。したがって、クエリを実行して特定のデータブロックを読み取り、テーブル内の特定の行のデータを取得すると、そのブロックがキャッシュされます。これにより、クエリが読み取る必要のあるブロックの多くがキャッシュされるため、同じSQLステートメントを同じバインド変数のセットで実行すると、物理的な読み取りがはるかに少なくなります。一般に、これらのブロックはLRU(最近使用されていない)キャッシュに保存されるため、他のブロックの方が一般的であるため、期限切れになるまでキャッシュされます(バッファーキャッシュを純粋なLRUキャッシュ以外のものにする例外があります--ブロックたとえば、全表スキャンを介して読み取られるキャッシュは、通常、キャッシュの最初ではなく最後に配置されますが、LRUキャッシュと考えるのが一般的に合理的です)。

次に、Oracleの外部にすべてのキャッシュがあります。たとえば、オペレーティングシステムは、読み取られたファイルの一部をキャッシュするように構成されていることが多いため、ブロックがOracleのバッファキャッシュから古くなった場合でも、ファイルシステムキャッシュにある可能性があります。これは、ディスクからブロックを読み取るよりもはるかに高速です。 。ほとんどのSANは、最近使用されたデータもキャッシュします。これにより、ディスクからデータを読み取ることなく、そのデータを取得できます。一般に、データがOracleにキャッシュされている場合はより効率的ですが、物理ドライブからブロックを読み取るよりも、ファイルシステムキャッシュまたはSANキャッシュからブロックを取得する方がはるかに効率的です。

クエリを連続して複数回実行すると、関心のあるブロックをどこかにキャッシュするように強制し、システムが実行する必要のある物理I / Oの量を大幅に削減するため、通常は高速になります。もちろん、クエリがI / Oバウンドでない場合、またはクエリがすでにキャッシュされているデータに対するものである場合、違いははるかに小さくなります。ただし、同じクエリを1日に複数回実行し、翌日にはまったく実行しないことで実質的にメリットが得られる可能性は十分にあります。これは、ある日は対象のブロックがキャッシュされておらず、他のセッションがあり、別の日はすべて関心のあるブロックはすでにキャッシュされています。

11gでは、結果を生成するために読み取られるブロックだけでなく、特定のクエリの結果をキャッシュできるようにする結果キャッシュを構成するオプションがあります。

于 2013-01-16T23:14:16.080 に答える
1

Oracle は通常、ディスクから読み取るすべてのページをキャッシュし、その情報をできるだけ長く保持しようとします (基本的には MRU キャッシュです)。これは、データベース操作のパフォーマンスを測定しようとするときの非常に重要な考慮事項です。多くの場合、クエリの後続の実行は、最初のクエリよりもはるかに高速になります。

クエリが必要とする I/O がほとんどないか、キャッシュに収まらない場合、またはキャッシュが他のユーザーによって頻繁に使用されている場合、キャッシュは目立たない可能性があります。

クエリ プランもキャッシュされることに注意してください。これは、クエリの観測されたパフォーマンスにも影響を与える可能性があります。

于 2013-01-16T23:09:48.360 に答える