最速怪談選手権

現在、あるWEBシステムの開発に携わっているものですが、
DBの検索が非常に遅いという問題にぶつかっている状態です。

そこで、問題点をできるだけ明確にするために
下記の3パターンで計測を試みてみました。

  (1) Statement クラスの executeQueryメソッドを使用してのデータ取得
  (2) PreparedStatement クラスの executeQueryメソッドを使用してのデータ取得
    ※但し、バインド変数を使用しない。
  (3) PreparedStatement クラスの executeQueryメソッドを使用してのデータ取得
    ※但し、バインド変数を使用する。



計測は、次の条件で行いました。

   3つ全てが同一のSQL。
   (バインド変数を使用する場合も、最終的には同じ静的SQLになるようにする。)

   時間はexecuteQueryメソッドの前後で計測する。
   (executeQueryメソッドコールの直前と直後の時間の差とします。)



結果は(1)、(2)では、約3秒程度とほぼ同タイム。しかし、(3)はでは1時間経ってもレスポンスが返ってこない状況でした。
これはどういう理由が考えられるのでしょうか。今、ここから先に進めなくて大変困っています。
同じような現象に遭遇した経験をお持ちの方、もしくは、この先どのように解析を進めるべきなのか示唆できる方。アドバイスをどうかよろしくお願い致します。



なお、計測は下記の環境にて行っております。

  OS:Windows XP Pro
  WAS:WebSphere 5.0.2
  DB:DB2 Version 7
  java:java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1)
  JDBCドライバ:Version 2.0 (使用クラス:COM.ibm.db2.jdbc.app.DB2Driver)

A 回答 (1件)

DBに限らずリモートホストへの操作に遅延などが起きる場合にはコーディングミスも考えられますが、ネットワーク環境に問題があることも多々あります。


まずは、コーディングといわず視野を広げられテスティグを行ってみてはどうですか?
テストの方法としてping、nslookup、telnetなどでの反応を試してみてください。
pingの応答速度、nslookupによる名前解決の速度(これが問題のパターンがよくある)、telnetで指定ポートへの接続速度の確認。
これらの状況を確認してみてください。
    • good
    • 0

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