1

SQL*PLus と autotrace traceonly でタイミングを設定してクエリを取得しましたが、完了までに 40 秒かかることがわかりました。

しかし、収集された SQL トレース ファイルによると、クエリが完了するまでに約 10 秒かかります。

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.02       0.02          0          0          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch    19537      2.66       6.49         77      61929          0      293035
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total    19539      2.68       6.52         77      61929          0      293035

SQL*Plus クライアントとデータベースを実行するマシンは、地理的に同じ中心部にあり、同じローカル LAN 上にあります。

表示は既に抑制されているため、レンダリングは問題になりません。ただし、アクセスされているテーブルは圧縮されています。

では、その 30 秒はどこに行くのでしょうか? ありがとう。

4

1 に答える 1

1

返信が遅くなり申し訳ありません。かなり長い間、別の作業に取りかかれていました。答えが出たと思います。今まで気がつかなかった愚かな間違い。SQLPlus案件のフェッチサイズでした。arraysize を 5000 (デフォルトは 15) に設定することで、実行時間をフェッチ時間に近づけることができました。クライアントとサーバー間のラウンドトリップが大幅に削減されました。

そして、あなたからのいくつかの提案/質問に応えて: 1. v$session_wait をチェックしましたか? 一目でそれを実行しなかったのは悲しいです。SQLPlus 統計を見て、この欠陥に気付きました。アドバイスをありがとう。これも次回チェックします。2. トレース ファイルに他に何かありますか? トレース ファイルには他に何もありません。つまり、同じセッション中に他の主要な SQL が実行されていないということです。3. 実際のクエリ? 申し訳ありませんが、ここに投稿できます。でも金額は想定内。4. クエリの直後にトレースを実行しますか? いいえ、最初にキャッシュをクリアしました。次に、トレースを有効にしてクエリを実行します。したがって、結果はキャッシュによって駆動されません。

ありがとうございました:)

于 2012-09-28T01:59:07.213 に答える