[PHP-users 534] Re: 持続的接続

Tetsuya Matsuzaki php-users@php.gr.jp
Wed, 04 Jul 2001 17:11:13 +0900


まつざきです。

> 
> OSはTurbo Linux 6.0 Database Serverで、
> WebサーバーにはApache-1.3.17を用いております。
> 
これなら私でも何とかわかる範囲です(^^)

> > まつざきです。
> >
> > とりあえず、これを読んでください。
> > http://www.php.net/manual/ja/features.persistent-connections.php
> >
> > 上記を読んでもわからない場合は
> > OS や Web サーバに何を使っていて
> > php はどうやって使っているかも書いてください。
> >
> > なお、持続的接続が有効にする為には条件があります。
> > 詳しくは上記リンクに書いてありますが
> > 例えば Apache で php をモジュールで使っている場合は有効です。
> >
> とりあえず、持続的接続に関して該当部分を読んでみました。
> httpdプロセスの余分な生成を防ぐという物だととらえております。
> 
うーん、これはちょっと違いますね。
接続処理を軽くすることで結果的に httpd の子プロセスの余分な生成が
減ることにはなりますが、、、
httpd プロセスから DB へアクセスするための接続処理の回数を
減らすことが出来るものといったほうが近いと思います。
# DB への接続というのは結構重たい処理なのです(^^;

> しかし、そうなると、pg_closeは何のために存在するのか
> 分からなくなってきました。とりあえず、接続を切るものと
> 考えていたのですが、上記ページではPostgresへの接続を
> 閉じると書いてありましたが、
> 
> ”pg_close() は、 pg_pconnect()で生成された
> 持続的なリンクは閉じません。”
> 
> と書いてあります。
> ここでいうリンクというのは一体何のことなのでしょう?

私も最初これが何を言っているのかわからなくて苦労しました。
リンクとは接続子と同じものと思ってください。

pg_close() の存在意義ですが、、、あまり無いようですね(^^;
一つのページで複数の接続を行うような特殊な処理をしなければ
使わなくても問題ないということでしょう。
持続的接続を使った場合は、まったく意味が無いようです。

> httpdプロセスをずっと占有し続けるというような
> イメージで捉えたら良いのでしょうか?

どちらかというと逆ですね。
httpd プロセスが DB との接続を保有していて
同じ httpd プロセスが使われた時に
前に接続した接続子を使いまわしすることが出来る。
という感じです。
# このあたりは httpd の動作原理も勉強しないとイメージつきにくいかも

> また、DBとの接続はどちらにしてもページ単位で
> 閉じるしかないのですね。
> 
問題がなければそれでよろしいかと思います。
別に持続的接続を使わなければならないということはありませんし、
使ったからといって機能的には変わりませんし、
(条件によってはパフォーマンスが良くなるぐらい)
下手に使うとトラブルの元になりかねませんからね。