- PR -

OO4O接続プール使用(CreateDatabasePool)の意義って?

1
投稿者投稿内容
がつん
ベテラン
会議室デビュー日: 2003/07/07
投稿数: 62
お住まい・勤務地: Sydney
投稿日時: 2003-10-15 16:22
こんにちは、がつんです。
今ASP.NETでの開発を行っております。
そこで、OO4ODBアクセス(Oracle9i)のスピードアップの技法として接続プールを使用(設定)
してやるとDBからのレスポンスが早くなると聞きました。

OraSession.CreateDatabasePool 20, 100, 200, dbname, cnuser, 0
しかし、何故早くなるのかが調査しましたがイマイチよく理解できません。
どなたか少しでもご存知の方、ヒントなど頂戴できませんでしょうか。

よろしくお願いいたします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-10-15 16:32
『Oracle Objects for OLE ヘルプ』の「リリース2.2と2.3の新機能」からの引用
引用:

この機能は、本質的にはデータベース接続中のODatabaseオブジェクトに対するリソース・マネージャです。この機能は、頻繁に使用されるオブジェクトのオープン状態をメンテナンスすることによって、継続的に接続を生成して破棄する必要性を取り除きます。この機能は、問合せを実行するために、起動ごとにOracleデータベースに接続するIISのASPスクリプトなど、使用頻度の高い中間層のアプリケーション・サーバーのコンポーネントでは特に有効です。新しいOraDatabaseオブジェクトは、プール内で使用できる数以上にオブジェクトが必要な場合にのみ作成されるため、パフォーマンスと拡張性が大幅に改善されます。



>調査しましたがイマイチよく理解できません

 Closeで接続を破棄してしまうのではなく、プールに一定時間貯めておきます。貯めてある時間内にDataSource, UserName, Passwordが同じ接続要求があれば、プールから取り出して使う、ということです。

 おそらく、DataSourceが本当にあるのかチェックしたり、接続というオブジェクトを作るためのメモリ確保が省略されるのでしょう。

[ メッセージ編集済み 編集者: Jitta 編集日時 2003-10-15 16:39 ]
ぴで
大ベテラン
会議室デビュー日: 2002/10/10
投稿数: 123
お住まい・勤務地: 東京
投稿日時: 2003-10-15 17:15
Netトレース等で見てみると分かりますが、接続時にはユーザプロセスと
サーバプロセスの間で何度もパケット交換が行われているため、接続には時間がかかります。
この予想以上に重い接続処理を省略することが接続プールを使用するメリットです。
がつん
ベテラン
会議室デビュー日: 2003/07/07
投稿数: 62
お住まい・勤務地: Sydney
投稿日時: 2003-10-15 17:18
Jittaさん、素早いご回答ありがとうございます。
クリアーになりました。

あと1点だけお聞きしたいのですが、プールに一定時間退避されるオブジェクトは、
DB接続レベルのオブジェクトのみなのでしょうか。つまり、SELECT実行されたカーソル
もプールされるのでしょうか?
もしこの考え方であるのであれば排他関係はおかしくなる気がしますが・・・
がつん
ベテラン
会議室デビュー日: 2003/07/07
投稿数: 62
お住まい・勤務地: Sydney
投稿日時: 2003-10-15 17:37
ぴでさん、ご回答ありがとうございます。
実際に動かして試してみた結果、見違えるほど接続処理の時間は早く
なりました。

みなさん、ありがとうございました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-10-15 22:29
引用:

がつんさんの書き込み (2003-10-15 17:18) より:

あと1点だけお聞きしたいのですが、プールに一定時間退避されるオブジェクトは、
DB接続レベルのオブジェクトのみなのでしょうか。つまり、SELECT実行されたカーソル
もプールされるのでしょうか?


 カーソルは、closeした時点で破棄されます。だって、今回使ったカーソルをまた使うかどうかはわからないでしょ?動的カーソルであれば毎回違うはずだし、静的カーソルであっても、オープンできるカーソル数の上限が決まっているので、おいておけないでしょう。

 ちなみに、サーバ/クライアントともWindowsで、最初の接続だけが異様に遅い場合、ORACLE_HOME/network/ADMIN/sqlnet.oraを修正することで驚くほど早くなります。
#SQLNET.AUTHENTICATION_SERVICESの値が (NTS)になっていたら、(NONE) に修正する
ぴで
大ベテラン
会議室デビュー日: 2002/10/10
投稿数: 123
お住まい・勤務地: 東京
投稿日時: 2003-10-16 08:53
引用:
あと1点だけお聞きしたいのですが、プールに一定時間退避されるオブジェクトは、
DB接続レベルのオブジェクトのみなのでしょうか。つまり、SELECT実行されたカーソル
もプールされるのでしょうか?

 SQL*Plusを自分のデスクトップ上に起動してDBに接続しておけば、
使う時に接続しなくてもすぐにSQLを実行できますよね。
 それと同じで接続そのものをプールしておくだけですので、他に特別なオブジェクトがプールされるようなことはありません。

引用:
ちなみに、サーバ/クライアントともWindowsで、最初の接続だけが異様に遅い場合、ORACLE_HOME/network/ADMIN/sqlnet.oraを修正することで驚くほど早くなります。
#SQLNET.AUTHENTICATION_SERVICESの値が (NTS)になっていたら、(NONE) に修正する

 NT認証をキャンセルするのは高速化の基本みたいなものですから、やってなければ是非やってみてください。アプリケーション起動後はプールされておらず、実際に接続処理が行われますからそれが早くなります。
 接続ユーザが多い場合はディスパッチャに負荷がかかりますから、別途チューニングが必要になるかもしれませんが、これ以上の内容はDB会議室・MLへどうぞ。

@ITにDB会議室が無いのはなぜでしょう?「Master of IP Network」会議室のほうでも時々スレ見かけますが、DB会議室が別にあったほうがいいと思いますが。。。
がつん
ベテラン
会議室デビュー日: 2003/07/07
投稿数: 62
お住まい・勤務地: Sydney
投稿日時: 2003-10-16 12:49
引用:
 カーソルは、closeした時点で破棄されます。だって、今回使ったカーソルをまた使うかどうかはわからないでしょ?動的カーソルであれば毎回違うはずだし、静的カーソルであっても、オープンできるカーソル数の上限が決まっているので、おいておけないでしょう。


そうですね、やっぱりそうですよね。ありがとうございます。
引用:
NT認証をキャンセルするのは高速化の基本みたいなものですから、やってなければ是非やってみてください。アプリケーション起動後はプールされておらず、実際に接続処理が行われますからそれが早くなります。


そんな技があったとは・・・恐れ入ります、完全に勉強不足でした。
「Master of IP Network」会議室の方も覗いてきます。
Jittaさん、ぴでさん、ありがとうございます!

[ メッセージ編集済み 編集者: がつん 編集日時 2003-10-16 12:48 ]

[ メッセージ編集済み 編集者: がつん 編集日時 2003-10-16 12:49 ]
1

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