接続
PHP Manual

接続プーリング (バージョン 1.2.0-1.2.12 限定)

注意:

この節の内容は、1.3.0 以降のドライバには無関係です。 歴史的な情報として、かつてプーリングをどのように使っていたかを残しておきます。

最新版のドライバにはプーリングという概念がなく、プロセスごとに一つの接続を保持します。 接続形式 (ReplicaSet/standalone/mongos) と条件の組み合わせごとにプロセスがわかれます。

接続の作成は、ドライバが行う作業の中でも最も重量級の作業です。 接続を正しく確立するには、どんなに高速なネットワークであっても数百ミリ秒はかかることがあります。 そこで、ドライバが新たな接続を作る回数をできるだけ減らすために、 プールにある接続を再利用することを考えます。

ユーザーが新しい Mongo のインスタンスを作ると、 必要な接続はすべて接続プールから取り出します (レプリカセットへの接続には 複数の接続が必要となることもあります。それぞれが、セット内の個々のメンバーへの接続となります)。 Mongo のインスタンスがスコープ外に出ると、接続をプールに返します。 PHP のプロセスが終了すると、プール内のすべての接続が閉じられます。

"なぜこんなに接続をオープンしてしまっているの?"

接続プールが作成する接続の数が大量になることがあります。 これは意外なことではなく、ちょっとした計算をすればどれだけの接続が必要になるかがわかります。 接続の総数に影響するのは、次の三要素です。

これら 3 つの変数を掛け合わせた connections_per_pool * pools_per_process * processes で、接続の総数が得られます。connections_per_pool はプールによって異なることに注意しましょう。つまり、この計算をするときには connections_per_pool は最大値を使わなければなりません。

たとえば、プールごとに 30 の接続があって PHP のプロセスあたり 10 のプールを用意し、 さらに PHP が 128 プロセスあるものとします。この場合、マシン上での接続数は 38400 になります。したがって、これだけの数をさばける程度にファイルディスクリプタの制限を増やしておく必要があります。 ファイルディスクリプタの上限に達してしまうと、それ以上の接続は処理できなくなります。

接続プーリングに関する詳細な情報は MongoPool を参照ください。


接続
PHP Manual