プロが教える店舗&オフィスのセキュリティ対策術

Oracle初心者です。

あるテーブル(レコード数:100万件程度)に対してSelectするSQLの実行時間を、Oracleのset timing on, set autotrace onlyで計測しました。

結果は1000ms程度だったのですが、 同じSQL文を実行するプログラム(java)を作成し、pstmt.executequery()してresultsetからデータをgetするまでの時間をログに出力させたところ、400ms程度でした。

プログラムの性能目標として、set timing on の値を設定していたため、実際の結果(javaプログラムが出力した処理時間)の評価に困っています。

差がでる原因をご教示いただけませんでしょうか。

宜しくお願いします。

A 回答 (1件)

パッと思いつくのでは以下です。



・全く同等のSQLであれば、SQL解析時間
・結果がキャッシュされるため。
・実行計画の出力結果を生成する時間

キャッシュがクリアされるようにした上で再度実行したほうがいいでしょうね。
(あるのかどうかわかりませんがデータベースかインスタンスの再起動してみるといいかもしれません)


いずれにしても複数回(10回程度)実行して、平均値を取ったほうがいいでしょう。
一番大きい値と一番小さい値を除いた平均や
一番最初と一番最後を除いた平均も
用意しておくといいでしょうね。
最大値、最小値もそれはそれで評価します。

この回答への補足

さっそくのご回答ありがとうございます。
上記結果は、複数回実行した結果となります。
通常運用時の実行時間を評価対象としたかったため、キャッシュされている状態、解析を全て完了した状態で計測しようと思ってました。

気になっているのは、転送時間を含むか否かのような気がしています。(根拠はないのですが…)

javaプログラムの方は、転送と処理を並行してやっているのでは?と。。。

補足日時:2012/04/15 23:49
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!