1

PHPでの永続的なデータベース接続について疑問があります。

同じホスト/ユーザーとの接続を必要とするすべてのPHPプロセスは、これを再確立することなくその接続を共有できるため、永続的な接続を使用すると効率的である可能性があることを理解しています。

最新の実装では、未知の接続状態の問題を克服する機能が導入されていることを理解しています。

だが!同じ接続を共有する1万のプロセスがある場合、一度に1つの接続しか使用できないため、アプリケーションのパフォーマンスが低下します。これは本当ですか、それとも私は間違っていますか?

4

2 に答える 2

1

持続的接続を使用すると、接続を確立するオーバーヘッドを節約できるため、どのような場合でも高速になります。

持続的接続を使用しても、単一の接続に制限されることはありません。100または1000の持続的接続の接続プールを持つことができます。

10000の並列クエリを処理するには、負荷分散とデータベースクラスタも必要になりますが、10kのクエリを同時にプッシュしようとすると、単一のデータベースが非永続接続と永続接続の両方で過負荷になります。

于 2012-07-19T16:13:16.307 に答える
1

データベースにクエリを実行するプロセスが実際に 10,000 個ある場合、特に接続を確立する際に永続的な接続によって提供される効率の利点は計り知れません。

Apache の下で PHP を実行していると仮定すると、最初に SQL 接続が行われると、Apache の「子プロセス」がそれを開いたままにします (つまり、永続的な接続)。その特定の「Apache子プロセス」に属するすべてのPHPリクエストは、もちろん接続情報が同じであれば、その接続を再利用します。Apache の構成は、単一の子プロセスが再起動される前に処理できるリクエストの数を定義します。これにより、永続的な接続がクリアされます。

さて、クエリをループまたは無限ループで実行している場合もあります。その場合、永続的でない接続でさえ致命的です。

永続的な接続を使用するプロセスの数がサーバーの効率の要因になるかどうかは疑わしいです (前述のように、クエリを使用する非効率的なコードがない限り)。注目すべきことは、いくつの永続的な接続を許可する必要があり、データベース/サーバーが処理できる数ですか?

永続的な接続に関する MySQL のマニュアルhttp://php.net/manual/en/features.persistent-connections.phpも、今要約した内容のほとんど (およびそれ以上) をカバーしています。

于 2012-07-19T16:17:52.347 に答える