[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 メーリングリストの案内