[PHP-users 13877] Re: odbc_pconnect と odbc_close

Takashi ARAKANE php-users@php.gr.jp
Tue, 11 Mar 2003 13:46:48 +0900


荒金と申します。Reply ありがとうございます。

At Tue, 11 Mar 2003 11:46:37 +0900,
Akira Shimosako wrote:
> # まとめ読みをしている&会社指定メールソフトの
> # 関係で、Threadを崩してしまっていると思います。すみません。
> # 次からはYahoo! Mailのアカウントで購読するなどして対応しますので、ご容赦く
> ださい。
In-Reply-To も、References も、きちんと入っていますので、
Thread は崩れていないと思います。

> > odbc_pconnect
> >   ↓
> > odbc_exec
> >   ↓
> > odbc_close
> >
> > という流れのプログラムを走らせた場合と、上記 odbc_pconnect を
> > odbc_connect に置き換えて走らせた場合とで、処理速度に違いが見られないので
> す。
> 
> 今確認できる環境が無いので、勘で書いていますが、
> もしかしたらDB2側で、Activate DBしておくと、
> closeしても処理速度が向上したりしませんか?
> 
> つまり
> db2 activate database YOUR_DB user ID using PASSWORD
> しておくと、速度に変化はでないでしょうか?

残念ながら、メモリとの兼ね合いから、activate database はできないのです。

> プログラムを動作させつつ、DB Server側で、db2 list applicationsコマンドで
> 接続状況を目視で確認してみてはどうでしょうか?
> 
> 正しく接続/切断を繰り返している場合は、コネクション数が変わらなくても
> APPハンドルが変わっていくのが見えるはずです。

こちらは確認してみました。
odbc_pconnect で接続し、odbc_close を行った場合には、
きちんと接続も終了していました。

odbc_close を行わない場合には、ぱっと見接続が終了していない
ようだったのですが、待機状態の Apache のプロセスが
MaxSpareServers の値まで減っていくのと同じタイミングで、
接続数も減っていきました。

見た感じだと、プロセス終了時に、きちんと接続も閉じているようです。

# 断言できないのがつらいですが・・・

この確認は、Apache 付属の ab で行ったのですが、
この際、php.ini の odbc.max_persistent と、odbc.max_links の
設定が、まったく効いていませんでした。

具体的には、DB2 側の最大接続数まで接続していき、
その後は odbc_pconnect が失敗してしまいます。

DB2側の接続数は、極端に増やすことができないため、
とりあえず Apache 側で、MaxClients を小さくしてしのいでいますが、
根本的な解決になったとは思えないのです。

何か良い設定等がございましたら、ご教授のほどお願いいたします。

/**
 *
 * $Author: Takashi ARAKANE <takashi@araka.net> $
 *
 */