• 締切済み

パフォーマンスの改善策は?

WINDOWS NT4.0+IIS+JRUNという環境でjavaで作成した業務系アプリのパフォーマンスを調査中なのですが、5台のクライアントから同時にアクセスすると1台の時より 3倍もの時間がかかります。ここで質問なのですが 最も時間をとっているのはDBへのコネクションを貼っているところなのです。このためコネクションプーリングを 用いるコードに改訂したのですが上記のパフォーマンス程度です。 (プーリングを用いる前はこの2倍かかっていました) パフォーマンスをあげるための改善方法として、効果的なものにどんなものがあるのでしょうか? ご教示ください。

みんなの回答

  • alfeim
  • ベストアンサー率58% (114/195)
回答No.2

何のDBを使っているか、やどういうpoolingをしているかが書かれてないのでそれなりにしか書けないのですが・・・ まずDBによって接続にかかる時間は変わります。よって検索能力がいくら高くても接続に時間が掛かるDBシステムでは結果として長い時間がかかる可能性があるため、DBそのものをすげ替える方法がその一。 なお、Oracleは接続処理のオーバヘッドが結構大きいそうで。 まぁ上記の回答では会社の上が納得しないでしょうから(なぜか日本では金額が高いものイコール品質の高いものと思う人が多いようです・・・保証規定とかをきっちり読めばFreeな物も高い商品も違いがないものが多いんですが・・・)Poolingをもっと高度にする事。現行でどういうPoolingしているのか分かりませんが、極端な話、Poolingクラスのコンストラクタでコネクションをいくつか生成し、finalize処理時にコネクションをクローズさせるようにして、さらに接続が必要なクラスからはPoolingクラスのインスタンス一つ相手に押し付ける事で接続のオーバヘッドを消す事が出来るはずです(ただ、シリアライズ処理や排他制御などはすべて不可能、もしくは自前で処理となるので余り現実的ではありませんが)。 次善策としてWebサーバと同様に同時接続数を限定し、同時接続数を上限として上記と同様のPoolingクラスと同様にコンストラクタ-ファイナライズ間で接続を保持するPoolingクラスのインスタンスを生成し、このインスタンスをweb側からの接続要求と結び付けるクラスを用意してやる事で(接続要求側は処理終了時点でPoolingインスタンスを返却する)接続のオーバヘッドをなくしたうえでDBの排他制御も利用する事が出来るはずです。 但し説続最大数を超えた要求が来た場合、それをIdlingさせておく必要があります。

mem_masa
質問者

お礼

質問内容が良くないのに丁寧に回答していただきありがとうございました。

  • SLIM
  • ベストアンサー率38% (191/491)
回答No.1

詳しくはないので 繋ぎのアドバイスとして・・・ IISのサービスウィンドを表示させ「パフォーマンス」というタブがありますよね? ここのHIT数を上げることによって多少調整ができるようです。 後はハードウェア的な調整でしょうか。 PentiumIII800EB*2 メモリ1024 RAID/0 メモリが512のときにはありましたが1024にしてから苦情は減りました(^^;

mem_masa
質問者

お礼

「パフォーマンス」タブのHIT数の調整は行いましたが 効果はありませんでした。 メモリーについては検討してみます。

関連するQ&A