この記事では、PHP プログラミングにおける mysql_connect と mysql_pconnect の違いを紹介します。この 2 つは非常に似ていますが、実際には機能が大きく異なります。興味のある友人は、この記事の紹介を参照してください。
永続的な接続では、クライアントごとに接続が開かれます。200 人が訪問した場合、200 の接続が存在します。 mysql_pconnect() 自体は多くの処理を行いません。唯一行うことは、php の実行終了後に mysql 接続を積極的に閉じないことです。 PHP が CGI モードで実行されている場合、基本的に pconnect と connect に違いはありません。CGI モードでは、PHP アクセスごとにプロセスが開始され、アクセスが完了するとプロセスが終了し、すべてのリソースが解放されます。 php が Apache モジュール モードで実行されている場合、Apache はプロセス プールを使用するため、httpd プロセスは終了後にプロセス プールに戻されます。これにより、pconnect で開かれた mysql 接続リソースも解放されなくなります。これは、Apache の同時アクセスが多くない場合、pconnect を使用することで DB に繰り返し接続する時間を節約し、アクセス速度を向上させることを意味します。ただし、Apache に大量の同時アクセスがある場合、pconnect を使用すると、以前の httpd プロセスによって占有されていた一部の mysql 接続が閉じられず、mysql が到達したために後続の一部のリクエストが満たされない可能性があります。 mysql の最大接続数は 500、Apache の最大同時アクセス数は 2000 に設定されています。すべてのアクセスで DB へのアクセスが必要となり、処理時間は比較的長くなることが想定されます。現在の 500 リクエストの httpd が終了していない場合、後続の httpd プロセスは mysql に接続できません (mysql 接続の最大数に達しているため)。現在の 500 の httpd プロセスが終了するか、再利用される場合にのみ接続できます。 mysqlに接続します DB 操作が複雑で時間がかかる場合、httpd は多くの同時プロセスをフォークし、最初に生成された httpd プロセスが DB 接続を解放しないため、後から生成された httpd プロセスは DB に接続できなくなります。 httpd プロセスの MySQL 接続は再利用されないため、多くの接続タイムアウトが発生します。 同時アクセス量が多くない場合、pconnect を使用すると単純にアクセス速度が向上しますが、同時アクセス量が増加した後、再度 pconnect を使用するかどうかはプログラマの選択によって決まります。 現在の PHP の MySQL への接続は、実際には接続プールを使用していません。pconnect は、Apache のプロセス プールを借用しているだけなので、同時アクセス量が多い場合、pconnect はデータベースへのアクセス効率を向上させることはできません。 実際のアプリケーションでは、mysql_pconnect を使用すると、新しいページの各更新とリクエストが高速になりますが、mysql_connect を使用すると、データベース接続が遅い場合は、それぞれの更新を再リクエストする必要があります。その違いがわかります。 。データベース接続が遅く、DB 操作がそれほど複雑ではなく、プログラムがデッドロックを引き起こさないことに十分自信がある場合、またはサーバーを制御でき、上記 4 つの条件のいずれか 2 つを満たしている場合は、pconnect を使用できます。 。スクリプトで pconnect を閉じる必要はありません。mysql で有効期間を設定することも、定期的にスキャンして長期間休止していた接続を強制終了するシェルを作成することもできます。 概要: pconnect をうまく使用するには、PHP コードの高品質とサーバーとサイトの構成を考慮する必要があります。 |