コネクションオブジェクトの扱い


蒼の子  2006-11-29 02:16:50  No: 134331

VB:6.0SP6  
OS:WindowsXP SP2  です
DBサーバー:SQLServer2003

プログラムの起動時にDBに接続し特定情報を取得するのですが、
コネクションオブジェクトをパブリック宣言し、一度接続したらその
オブジェクトを閉じずに画面の終了まで開いたままにしています。
この場合、画面の起動中はDBにつなげたままになるのですが、
これもサーバーの同時接続数に含まれるのでしょうか?
それともサーバーに接続した瞬間だけが接続したものと
みなされるのでしょうか?

自分はいちいちデータ処理の前後にDB接続・切断は行うは大変なので
できるだけしたくないです。


魔界の仮面弁士  2006-11-29 18:48:52  No: 134332

> DBサーバー:SQLServer2003
そのような製品はありません(現行製品は2005です)。
とりあえず、SQL Server 2000 と仮定して回答します。

確認のために、パフォーマンス モニタで、『SQLServer:General Statics』の
トレースログをとってみると良いでしょう。現在の接続数をモニタできます。

> これもサーバーの同時接続数に含まれるのでしょうか?
同時接続数に含まれます。

> それともサーバーに接続した瞬間だけが接続したものと
その場合は、利用時のみ開き、すぐに閉じるという手法を使います。つまり、
> 自分はいちいちデータ処理の前後にDB接続・切断は行うは大変なので
ということになりますね。
ここでいう「大変」というのが、プログラム的に修正が大変という意味か、
それとも、サーバ側の負荷が大変なことになる、という意味かは不明瞭ですが、
再接続に伴うオーバーヘッドが発生することになるので、パフォーマンスは低下します。

この、両者の中間策として、コネクション プーリングという手法もあります。
これは「必要なときだけ接続しつつ、再接続のオーバーヘッドを回避する」もので、
内容としては、Closeされた接続を、サーバ側が自動的に一定時間だけ保持しておき、
それを次回接続のために利用することで、再接続のオーバーヘッドを回避する機能です。
(長時間使用されなかった接続は、不要な接続して破棄されます)

プールの実装手法には幾つかの方法がありますが、具体例としては、
ISBN:4798101303 などが参考になるでしょう。


特攻隊長まるるう  2006-11-29 20:51:55  No: 134333

# やっぱ弁さんの回答を待つべきだなぁ。。。新しい情報が手に入るからw

> 確認のために、パフォーマンス モニタで、『SQLServer:General Statics』の
> トレースログをとってみると良いでしょう。現在の接続数をモニタできます。
パフォーマンス モニタなんだ?。。。素人(ボク)が簡単に確認するなら
Enterprise Manager で[管理]-[現在の利用状況]とか見てましたが。。。
なんか問題ある解釈だったらツッコミください。。。m(__)m
正直、このあたりは詳しく調べたこと無い。。。(滅
[SQL Server 2000 管理者用ポケット コンサルタント]
http://www.microsoft.com/japan/technet/prodtechnol/sql/2000/books/c10ppcsq.mspx


フウセンウナギ  2006-11-29 22:11:05  No: 134334

間違えました。
サーバーDBはSQL Server 2000です。
OSがWindows Server 2003です。

コネクションオブジェクトを開きっぱなしでも接続数がカウントされる
ということですが、この場合、SQLサーバーのライセンス数をオーバー
した場合、どうなるのでしょうか?

ライセンスモードが接続クライアント数で最大20と設定されている場合、
20人がコネクションすると、それ以降はだれも接続できないのでしょうか?


魔界の仮面弁士  2006-11-30 03:25:57  No: 134335

>> # やっぱ弁さんの回答を待つべきだなぁ。。。新しい情報が手に入るからw
期待して待つのは勘弁してくださいな。SQL Server は専門外なので…。

>>> 確認のために、パフォーマンス モニタで、『SQLServer:General Statics』の
>>> トレースログをとってみると良いでしょう。現在の接続数をモニタできます。
>> パフォーマンス モニタなんだ?。。。素人(ボク)が簡単に確認するなら
>> Enterprise Manager で[管理]-[現在の利用状況]とか見てましたが。。。
その瞬間値の確認だけならどちらでも良いでしょうけれども、アプリ実行中の接続状況を見るならば、
時間軸でグラフ化されたログとして読める方が便利かな、と。<パフォーマンス モニタ

> それ以降はだれも接続できないのでしょうか?
それ自体は、実際に試してみればわかることですよね。

で、私自身は、CALモードでの運用経験が無いこともあって、ライセンス絡みの
部分については正直わかりません。すみません。

というよりも、そのあたりの話になると、もはや VB の話題とは関係ありませんので、
SQL Server 関連のコミュニティ(http://www.sqlpassj.org/ など)を利用されることをお奨めします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加