認証用のアプリケーションの 1 つで phpgacl ライブラリを使用しています。このライブラリは、mysql_pconnect を使用してデータベースに接続しています。問題は、接続が再利用されず、接続が多すぎるというエラーでアプリケーション全体がクラッシュする場合があることです。同時ユーザーが多すぎるわけではないため、mysql の最大接続数を増やしても問題は永久に解決されません。問題を単純化するために簡単なテストを行いました。簡単なphpスクリプトを書きました/var/www/a.php
:
<?
mysql_pconnect('localhost', 'root', 'root');
?>
localhost/a.php
初めてヒットすると、mysql プロセスリストにデータベースへの接続が 1 つ表示されます。リンクを 2 回目にクリックすると、その接続が再利用されることを期待します。しかし、そうではありません。新しい接続が作成され、スリープ状態の 2 つの接続が表示されます。リンクを踏むたびにカウントが増えます。
Apacheを再起動すると、これらすべての接続が閉じられます。
php mysql_pconnect がどのように機能し、以前に作成された mysql 接続をどのように使用するかを知りたいです。そして、上記の例でこれが起こらないのはなぜですか?
ここのコメントの1つは次のとおりです。
You are probably using a multi-process web server such as Apache. Since
database connections cannot be shared among different processes a new
one is created if the request happen to come to a different web server
child process.
これは、Apache で mysql_pconnect を使用することは推奨されないということですか?