[PHP-users 18129]Re: 持続的接続の接続上限秒数と接続数上限はどうやって指定する?

Y.Watanabe yuw @ msj.biglobe.ne.jp
2003年 9月 30日 (火) 19:16:22 JST


渡辺です。

# そ〜ろそろ、僕なんかよりもっとDBに詳しい人に出てきてほしいぞ、と。(笑)

"Tatsuya Matsuyama" wrote on 2003/09/30 15:38
with Subject: [PHP-users 18128] Re: 持続的接続の接続上限秒数と接続数上限はど
うやって指定する?

>ただ、それでも
> phpの_pconnectを切断するにはどうすればいいのか
>ハッキリした記述を見つけられません。

うーん。
MS SQLサーバであれPostgreSQLであれoracleであれ、
「PHPスクリプトが終了してもDB接続を切断しないことによって
  後からくる他のリクエストがそのDB接続を引き続き使えるようにすることで
  DB接続のオーバーヘッドを減らす」
というのが持続的接続の目的ですので、
pconnectを明示的に切断するという行為がその目的に
矛盾してるような気がするので、
明示的に切断する方法って無いような気がします。

明示的に切断する方法を強いて言えば、
    apache_child_terminate -- このリクエストの後にApacheプロセスを終了する
    http://jp.php.net/manual/ja/function.apache-child-terminate.php
を使ってApacheの子プロセスを殺すことによって、それにくっついている
pconnectも切断されるようしむける、とか。


>この論が正しければ、以下の認識も正しいですよネ?
>
>1.apacheが起動した後、*同じプロセス*を保持しないと
>  同一ユーザー名で各プロセスごとに
>  いくつもの持続的接続がオープンされる(可能性がある)。
>
>2.仮に(起動後から増減のないまま)プロセス数を保持できたとすると、
>  最大で
>  apacheのプロセス数×SQLserverへのログインユーザー名数
>  だけ「持続的接続」が発生する。

この認識で正しいと思います。(ですよね!?>もっと詳しい方^^;)


>そうすると、私の疑問は、
>SQLserverの最大接続数に達することがハッキリしているような状況
>(例えばSQLserverのログインユーザー名が20名で
>SQLserverの最大接続数が75だとしたら、
>4つ以上のapacheのサーバープロセスを起動する場合など)では、
>
>1.
>双方で安定するよう
>apacheのプロセス数とSQLserverの最大接続数を指定し
>apacheでは故意にプロセスが増減しないようにする
>
>もしくは、
>2.
>持続的接続をcloseする処理を追加する
>
>の2つの選択肢の内、
>どちらを選ぶべきなのか分からない点です。
>
>2については(phpでは)方法がない(?)ので
>1の方法を探るのが一般的と考えてよいのでしょうか?

そう思います。

例えば、httpd.conf に
    MaxRequestsPerChild 10
を設定することで、子プロセスが10回リクエストを処理したら
子プロセス自ら自爆するようにできますので、その子プロセスによって
開かれている持続的DB接続も切断されることになります。
そんな方法しかないですかねえ・・・。





PHP-users メーリングリストの案内