none
ADO.NETでのコネクションプールについて RRS feed

  • 質問

  • お世話になっております。

     

    まず環境ですが.net framework2.0で、ASP.NETにおいてSqlDataSourceを利用しています。

    あるページを開くときにSqlDataSourceがSQLのパラメータの値を変えてストアドを30回ぐらい呼び出します。

    このときローカルの環境では問題なかったのですが、ホスティングサービスの環境に移しましたら、エラーがでるようになりました。

    一度ページは表示されるのですが、ポストバックしたときに再度表示させる時にエラーが出ていると判断しています。

    エラーの内容がコネクションプールからコネクションを呼び出せなかった(呼び出しがタイムアウトしました)とかっていう感じのものでした。

    コネクションは再利用されるためにすぐにはコネクションは実際には切断されないというのは聞いてるのですが、コネクションが利用し終わっても、すぐにはプールに戻されないということでしょうか?

     

    もしそうであればあまりアクセスが多くないサイトでも、DB接続の多いページがあるとコネクションプールが枯渇しやすいのかなと思ったりしてしまって、何か回避策とかあるのかなと考えてしまいます。

     

    このあたりの事情に詳しい方よろしくお願い致します。

     

    2008年9月16日 10:34

回答

すべての返信

  • ちょっと月並みなのですが、以下の点はどうでしょう?

    ○コネクションは利用したあとに、きちんとCloseが呼び出されることが保証されてますか?または、using (SqlConnection conn = new SqlConnection())みたいな形になっているでしょうか?
    ○SqlConnectionStringBuilder.MaxPoolSizeはプールに維持できる最大数を設定できたりします。このあたりはどうでしょう?
    ○SqlConnection.ConnectionTimeoutは接続試行からエラーが発生するまでの時間を設定できたりします。この辺もいかがでしょう?


    2008年9月16日 12:39
  • CrimsonPorkさま、返信ありがとうございます。

     

    自分の使い方がもしかして間違っているのかな?って思ったりしました。

    というのは、SqlDataSourceはツールボックスから貼り付けてウィザードに沿ってやっていたので、このやり方の時は自分でSqlConnectionを作ったりしていませんし、今ライブラリーを見てもそれらしい設定プロパティが見当たらない感じです。

     

    MaxPoolSizeおよびConnectionTimeoutは教えて頂きありがたいです。

    自分ではプールサイズなどはASP.NETなどからの設定ではなく何らかのあらかじめシステムで設定するものだと思っておりました。(これは驚きでした)

    ConnectionTimeoutはサイズを大きくしたとしても今度は画像表示に時間がかかってしまう可能性も出て良い解決策ではなくなるのかなと思っております(MaxPoolSizeとの併用でうまくいくのかもしれないですね)

     

    現状システムとしては別手段(セッションに保存しています)にて、回避しているのですが、自分としてはこのあたりのことをよく知りたいなと思いご質問させて頂きました。

    宜しくお願い致します。

    2008年9月16日 16:49
  • こんにちは。中川俊輔 です。

     

    CrimsonPorkさん、回答ありがとうございます。

     

    freemannさん、フォーラムのご利用ありがとうございます。

    有用な情報と思われたため、CrimsonPorkさんの回答へ回答済みチェックをつけさせていただきました。

     

    今後ともフォーラムをよろしくお願いします。

    それでは!

     

    2008年10月2日 7:12