@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

DataBaseの接続はどこでやるのがベスト?

投稿者投稿内容
よねちん
ベテラン
会議室デビュー日: 2002/09/18
投稿数: 55
投稿日時: 2002-10-25 11:46
.NETでWEBアプリケーションを作成しています。
そこでデータベースの接続と切断はそれぞれどのタイミングで
行うのが効率が良いのでしょうか?

クラサバではForm_Loadで接続、Form_QueryUnlodで切断を
していたのですが、Webの場合はどこがいいのか思考錯誤し
ています。

皆さんの意見をお聞かせください
NothingButXMLInfoSet
大ベテラン
会議室デビュー日: 2002/07/16
投稿数: 116
投稿日時: 2002-10-25 12:18
引用:

kyoneさんの書き込み (2002-10-25 11:46) より:
.NETでWEBアプリケーションを作成しています。
そこでデータベースの接続と切断はそれぞれどのタイミングで
行うのが効率が良いのでしょうか?


現在は接続プールの機能が発達していますので、有名どころのDBMSへのアクセスであればSQL文を送出する直前に接続して、実行完了後は即座に切断するのがほとんどの場合で最適だといわれています(有名どころという意味は、接続プールって結局はDBへのアクセスモジュールが提供する機能なので、そこがきちんと作られていないとそれに頼れないから、という意味で他意はありません)。

引用:

クラサバではForm_Loadで接続、Form_QueryUnlodで切断をしていたのですが、


上記はC/Sでも同様です。接続はできるだけ遅く開き、できるだけ早く解放したほうがいいといわれています。つまり、OpenとCloseはメソッド(プロシージャ)の内部に対となって書かれているべきだということです。
よねちん
ベテラン
会議室デビュー日: 2002/09/18
投稿数: 55
投稿日時: 2002-10-25 16:08
>現在は接続プールの機能が発達していますので、有名どころのDBMSへのアクセスであればSQL
>文を送出する直前に接続して、実行完了後は即座に切断するのがほとんどの場合で最適だと
>いわれています

NothingBut.NETFXさんRESありがとうございます。

やはり、直前でするのが良いのですね。一般的な技術図書でも
SQL文を発行する前に接続しているものが多いですね。

NothingBut.NETFXさんの意見のとおり作ってみます。
ありがとうございました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2002-10-28 10:56
引用:

よねちんさんの書き込み (2002-10-25 16:08) より:
>現在は接続プールの機能が発達していますので、有名どころのDBMSへのアクセスであればSQL
>文を送出する直前に接続して、実行完了後は即座に切断するのがほとんどの場合で最適だと
>いわれています

NothingBut.NETFXさんRESありがとうございます。

やはり、直前でするのが良いのですね。一般的な技術図書でも
SQL文を発行する前に接続しているものが多いですね。


 ORACLE使用時は注意。ORACLEとMSと、ぢちらにバグがあるかわかりませんが、クローズできません(ORACLE8で確認)。ただし、接続自体はなくなるのか(それともOleDbConnectionのインスタンスを解放したため?)、しばらく(時間は不定)すると閉じます。
 たくさんの接続が見込まれるなら、1つの接続でなるべく多くの処理が行えるようにしておく方がよいかもしれません。(そして、バグフィックス後に直しやすいように)
まりり
ぬし
会議室デビュー日: 2001/12/05
投稿数: 329
投稿日時: 2002-10-28 11:24
>Jittaさん
実際にOracleから見て接続が残るという話でしょうか?
ADOだとかADO.NETは、たぶんコネクションプールを持ってます。
ですので、Closeとしてもその場で接続が切れないのは当然ですし、
ある程度使わずに置けば勝手に切れると思います。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2002-10-28 12:42
引用:

まりりさんの書き込み (2002-10-28 11:24) より:
>Jittaさん
実際にOracleから見て接続が残るという話でしょうか?
ADOだとかADO.NETは、たぶんコネクションプールを持ってます。
ですので、Closeとしてもその場で接続が切れないのは当然ですし、
ある程度使わずに置けば勝手に切れると思います。


 そうです。ORACLEのツールで確認しています。
 私が問題だなと思うのは、

1.接続が再利用されない
 同じPG中でオープン、クローズ、オープンし、接続ユーザ数が増えるのを確認
 新しいインスタンスを作っているからとは思うが、それなら閉じてほしい
2.いつ切れるかわからない
 「切断してもコネクションを持続する」というオプションをfalseにしても保持されている
 1のプログラム終了後も保持されている
3.2〜3ユーザ分の接続を使用する
 1のPGで確認。なぜかOleDbConnection1つをオープンすると2〜3ユーザ増える

といったところです。いつ切れるかわからない=接続がいっぱいの時にいつまでユーザを待たせればよいかわからない、のは困りませんか?特にデバッグ時には、「閉じているのにプールされている」のか、「閉じられずにリークしている」のか、5分くらい(前述PGでの実測)経過しないとわかりません。接続の上限(ライセンス数)があるのに、これは不便です。


#実際にPGを組んだのは同僚ですが
NothingButXMLInfoSet
大ベテラン
会議室デビュー日: 2002/07/16
投稿数: 116
投稿日時: 2002-10-28 13:46
手元にORACLEはないので、はずしまくってるかもしれませんが・・・

Jittaさんのところで使われているのはOraOLEDBですか?OraOLEDBですと、なんか接続文字列に妙な設定をしなければならないとここに書いてありますね。。。

あと、この問題は
ODP.NET
、またはMicrosoft .NET Data Provider for Oracleを使えば解決したりして。。。?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2002-10-30 15:03
引用:

NothingBut.NETFXさんの書き込み (2002-10-28 13:46) より:
手元にORACLEはないので、はずしまくってるかもしれませんが・・・

Jittaさんのところで使われているのはOraOLEDBですか?OraOLEDBですと、なんか接続文字列に妙な設定をしなければならないとここに書いてありますね。。。

あと、この問題は
ODP.NET
、またはMicrosoft .NET Data Provider for Oracleを使えば解決したりして。。。?


 う〜ん、米OTNはチェックしていなかったなぁ。日OTNの認証データとは別ですね。
 MSの.NET Data Provider for Oracleは…使わないでおこうと言うことになったのですが、なぜだったかな?「英語のヘルプしかない。本当に日本語で使えるのか?」みたいな理由だったと思います。

 やはり英語は必須ですね

スキルアップ/キャリアアップ(JOB@IT)