- - PR -
DataBaseの接続はどこでやるのがベスト?
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2002-10-25 11:46
.NETでWEBアプリケーションを作成しています。
そこでデータベースの接続と切断はそれぞれどのタイミングで 行うのが効率が良いのでしょうか? クラサバではForm_Loadで接続、Form_QueryUnlodで切断を していたのですが、Webの場合はどこがいいのか思考錯誤し ています。 皆さんの意見をお聞かせください | ||||||||
|
投稿日時: 2002-10-25 12:18
現在は接続プールの機能が発達していますので、有名どころのDBMSへのアクセスであればSQL文を送出する直前に接続して、実行完了後は即座に切断するのがほとんどの場合で最適だといわれています(有名どころという意味は、接続プールって結局はDBへのアクセスモジュールが提供する機能なので、そこがきちんと作られていないとそれに頼れないから、という意味で他意はありません)。
上記はC/Sでも同様です。接続はできるだけ遅く開き、できるだけ早く解放したほうがいいといわれています。つまり、OpenとCloseはメソッド(プロシージャ)の内部に対となって書かれているべきだということです。 | ||||||||
|
投稿日時: 2002-10-25 16:08
>現在は接続プールの機能が発達していますので、有名どころのDBMSへのアクセスであればSQL
>文を送出する直前に接続して、実行完了後は即座に切断するのがほとんどの場合で最適だと >いわれています NothingBut.NETFXさんRESありがとうございます。 やはり、直前でするのが良いのですね。一般的な技術図書でも SQL文を発行する前に接続しているものが多いですね。 NothingBut.NETFXさんの意見のとおり作ってみます。 ありがとうございました。 | ||||||||
|
投稿日時: 2002-10-28 10:56
ORACLE使用時は注意。ORACLEとMSと、ぢちらにバグがあるかわかりませんが、クローズできません(ORACLE8で確認)。ただし、接続自体はなくなるのか(それともOleDbConnectionのインスタンスを解放したため?)、しばらく(時間は不定)すると閉じます。 たくさんの接続が見込まれるなら、1つの接続でなるべく多くの処理が行えるようにしておく方がよいかもしれません。(そして、バグフィックス後に直しやすいように) | ||||||||
|
投稿日時: 2002-10-28 11:24
>Jittaさん
実際にOracleから見て接続が残るという話でしょうか? ADOだとかADO.NETは、たぶんコネクションプールを持ってます。 ですので、Closeとしてもその場で接続が切れないのは当然ですし、 ある程度使わずに置けば勝手に切れると思います。 | ||||||||
|
投稿日時: 2002-10-28 12:42
そうです。ORACLEのツールで確認しています。 私が問題だなと思うのは、 1.接続が再利用されない 同じPG中でオープン、クローズ、オープンし、接続ユーザ数が増えるのを確認 新しいインスタンスを作っているからとは思うが、それなら閉じてほしい 2.いつ切れるかわからない 「切断してもコネクションを持続する」というオプションをfalseにしても保持されている 1のプログラム終了後も保持されている 3.2〜3ユーザ分の接続を使用する 1のPGで確認。なぜかOleDbConnection1つをオープンすると2〜3ユーザ増える といったところです。いつ切れるかわからない=接続がいっぱいの時にいつまでユーザを待たせればよいかわからない、のは困りませんか?特にデバッグ時には、「閉じているのにプールされている」のか、「閉じられずにリークしている」のか、5分くらい(前述PGでの実測)経過しないとわかりません。接続の上限(ライセンス数)があるのに、これは不便です。 #実際にPGを組んだのは同僚ですが | ||||||||
|
投稿日時: 2002-10-28 13:46
手元にORACLEはないので、はずしまくってるかもしれませんが・・・
Jittaさんのところで使われているのはOraOLEDBですか?OraOLEDBですと、なんか接続文字列に妙な設定をしなければならないとここに書いてありますね。。。 あと、この問題は ODP.NET、またはMicrosoft .NET Data Provider for Oracleを使えば解決したりして。。。? | ||||||||
|
投稿日時: 2002-10-30 15:03
う〜ん、米OTNはチェックしていなかったなぁ。日OTNの認証データとは別ですね。 MSの.NET Data Provider for Oracleは…使わないでおこうと言うことになったのですが、なぜだったかな?「英語のヘルプしかない。本当に日本語で使えるのか?」みたいな理由だったと思います。 やはり英語は必須ですね ![]() |