アパッチの視点
Apacheには1つの親プロセスがあります。このプロセスは、Webサーバーに着信するすべての要求を処理する子プロセスを作成します。Webサーバーの起動時に開始される子プロセスの初期量は、StartServers
によって構成されます。 apache構成のディレクティブ。 ServerLimit
までWebサーバーにヒットするリクエストの量が増えると、必要に応じて数が増えます。 到達しました。
PHPと永続的な接続
PHP(mod_phpとして実行、スクリプト実行の最後にCGIとしてすべてのリソースが解放される)が、要求に対してデータベースとの永続的な接続を確立するように指示されている場合、この接続は、スクリプトが終了した後も保持されます。 holdは、リクエストが処理されたapache子プロセスとデータベースサーバー間の接続であり、この正確な子プロセスによって処理されているすべてのリクエストで再利用できます。
何らかの理由で(正確な理由は聞かないでください)、子プロセスが実際の要求よりも長く占有されていて、別の要求が着信した場合、親apacheプロセスは、この要求を、確立されていない可能性のある(新しい)子プロセスにリダイレクトします。これまでのデータベースへの接続。スクリプトの実行中に必要な場合は、観察したとおりにSIDが発生します。現在、apacheの2つの異なる子プロセスによって保持されている2つの接続があります。
覚えておいてください...
これも多くの問題を引き起こす可能性があることを知っておくことが重要です。エンドレスループやトランザクションの中止など、スクリプトの実行中に予測できないエラーが発生した場合、接続はブロックされ、再利用できません。また、データベースで使用可能なすべての接続が使用されている可能性がありますが、データベースにアクセスしようとしているApacheサーバーの別の子プロセスがあります。このプロセスは、データベースによって接続が解放されるまで、またはapache(タイムアウトまたは終了による自発的)このページのこのトピックに関する詳細情報:http://www.php.net/manual/en/features.persistent-connections.php
コメント会話で話し合ったことがすべて正しくまとめられ、何も忘れていないことを願っています。もしそうなら、ヒントを残してください。それを追加します。 :)
編集:
このコメントで言及されている@MonkeyZeusの記事を読み終えたところです。これは、上記で要約したプロセスを説明し、永続的な接続と連携してより適切に機能するようにApacheサーバーを最適化する方法に関する有用な情報を提供します。Oracleデータベースバックエンドの有無にかかわらず使用できます。ただし、ご覧になる必要があります:http://www.oracle.com/technetwork/articles/coggeshall-persist-084844.html