0

Oracle 10g では、現在かなり高速 (約 30 ~ 40 分) で実行される SQL があります。2 日前に同じ SQL を実行した場合、SQL が完了するまでに約 2.5 時間かかりました。クエリの実行計画が変更された可能性があると思いました。しかし、そうではありませんでした。両方の実行計画が一致しました。そこで、DBA の助けを借りて、期間中のデータベース アクティビティを見つけるために AWR レポートを生成しました。案の定、この実行時間の長いクエリは、他のいくつかのクエリと共に取り上げられました。AWR では、このクエリは多数のバッファ取得、ディスク読み取りリストで特徴付けられましたが、さらに高いクエリが少なくとも 4 つありました (それらを合わせて 98% を占めていました)。実際、両方のリストの上位のクエリは、バッファ取得の約 50% とディスク読み取りの 80% でしたが、私の場合はそれぞれ約 2% と 0.9% しかかかりませんでした。

だから私の質問 - 他のクエリによる大量のバッファ取得とディスク読み取りがクエリのパフォーマンスに影響を与える可能性はありますか?

4

2 に答える 2

3

絶対。データベース設計の深みには立ち入らずとも、データベース システムの内部には多数の共有リソースがあります。

最大のものは通常、データ ページです。これらはサーバー全体で維持され、クエリのデータを提供します。たとえば、テーブルを複数回読み取る場合、ページが既にメモリ内にある場合、2 回目の読み取りははるかに効率的です。他のクエリがページ キャッシュを使用している場合は、キャッシュに収まるページが少なくなり、クエリがディスクから読み取る必要がある可能性が高くなります。

もちろん、直接の競合もあり得ます。複数のクエリが同時にディスクからデータをフェッチしようとしている可能性があります。また、I/O 呼び出しがキューに入ってしまい、遅延が発生する可能性があります。

より微妙な相互作用もある可能性があります。データベース エンジンの重要な最適化の 1 つは、「先読み」です。つまり、1 つのデータ ページを読み取ると、次のデータ ページも必要になる可能性があります。エンジンがメモリ内のデータを処理している間、I/O システムは外に出て次のデータを取得できます。

同時に多くのクエリを実行している場合、エンジンはページを先読みするための帯域幅を持っていない可能性があります。

これらは、バッファリングやその他のクエリがパフォーマンスに与える影響のほんの一例です。しかし、答えは圧倒的な「はい」です。他のクエリは、クエリのパフォーマンスに影響を与える可能性があります。

于 2014-07-11T11:43:29.437 に答える