• 締切済み

あるタイミングでoracleの処理が遅くなることについて。

質問です。 oracleにアクセスするWebシステムで、ある程度負荷をかけると処理が極端に遅くなります。 OS : Miracle Linux2.0 WebServer : Tomcat4.1.24 Oracle : 9.0.1 実際に行っている処理は、DBからデータを取得するだけです。データの量としても多くはなく、100件程度です。 コネクションプールを用いており、データソースからコネクションを取得し、ResultSetから結果を取得しています。 ResultSetからのデータ取得は、下記のようにwhile文でループさせています。ちなみに、next()を実行させているだけで、その他のことは何もしていません。 while( resultset.next()){ } 上記のような処理に対し、ボタンを20回ほど連打すると、処理が極端に遅くなってしまいます。処理の計測は、while文の前と後にcurrentTimeMillis()を設け計測しました。 1アクセスのみの時間は0.2sほどですが、連打をすると20sと遅さになります。 また、while文の最後にSystem.out.print()にて処理の終わりを確認しようと思ったのですが、処理が遅くなった途端、終わりまで到達せずに止まったような感じになり、20sほど経過してから、アクセスした分の処理が一気に終わるのです。 テーブルのロックか、もしくは、パフォーマンスの問題でしょうか?曖昧な説明で申し訳ありませんが、些細なことでもよろしいので、どなたかご教授願いますでしょうか。 よろしくお願いいたします。

みんなの回答

回答No.1

想像ですが・・ 連打により、コネクションプールが足りなくなって、セッションを追加するのに 時間を要しているんじゃないですかね。 機械にもよりますが、オラクルの認証にも、それなりの時間がかかりますので。

mmn77_777
質問者

補足

返事が遅くなり申し訳ありません。 コネクションプールですが、あらかじめ連打により必要数のセッションを確立した後でも、同じようにあるタイミングから処理が遅くなってしまいます。 また処理が遅くなりそのまま応答が返ってこない場合もあります。その時は、Tomcatの再起動では回復せず、oracleのリスナーの再起動が必要になります。 プロセスを見ると、oracleのセッションがcloseせずに処理を続けているようなのです。 よろしくお願いします。

関連するQ&A