1

PostgresSQLをデータベースサーバーとして使用するPHPで記述されたWebアプリケーションを継承しました。私はPHPとPostgresSQLの経験がまったくなく、Java / C#のバックグラウンドを持っています。私はそれがどのように機能するかを研究していて、それをプロファイリングしているときに、古いプログラマーがすべてのページ要求中に、次のようなものを使用してデータベースへの接続を開くDatabaseという名前のクラスをインスタンス化することに気付きました。

$this->connection = pg_connect($qs, PGSQL_CONNECT_FORCE_NEW)

プロファイラーによると、これは非常にコストのかかる呼び出しであり(ページは2.7秒で読み込まれます...)、フラグPGSQL_CONNECT_FORCE_NEWが実際に必要かどうかといつ必要か疑問に思いました。接続文字列は常に同じであるため、代わりにpg_pconnect(またはそのフラグなしのpg_connect)を使用しようとしましたが、ページは741ミリ秒で読み込まれました。今はすべて正常に動作しているようですが、これによってアプリケーションがどこかで壊れてしまうのではないかと心配しています。PHPの経験がないので、そのフラグを使用する方法に意味があるかどうかを知りたいと思います。確認する必要のあるシナリオ。明らかに、信頼できる単体テストはありません。ちなみに、このpg_(p)connectが実際にどのように機能するかについての優れたリソースを知っていますか?公式ドキュメントは十分に深くないようです。

ありがとうございました!

4

2 に答える 2

0

この定数を使用すると、すでに開いている接続を使用する代わりに、毎回新しい接続を作成するようにpg_connectに指示します。これは、プログラムが次のようなセッション依存機能を使用していることを示している可能性があります。

幸運を

于 2012-08-29T08:32:21.173 に答える
0

警告:pg_pconnectは、各Apacheバックエンドの存続期間中1つの接続を維持するため、多くの接続が発生しても驚かないでください。それらすべてが同時にクエリを発行することになった場合、データベースサーバーが詰まります。

ただし、データベースへの接続に2秒かかるという話は聞いたことがありません。psqlを起動し、接続し、クエリを発行して、0.2秒で応答を取得できます。これは、古いネットブックにあります。ネットワーク設定などを確認してください。ここで何か奇妙なことが起こっています。

于 2012-08-29T10:48:10.070 に答える