Docs Menu
Docs Home
/
MongoDB マニュアル
/ / /

接続プール設定のチューニング

項目一覧

  • 最大接続数の計算
問題点
解決法
アプリケーション側の処理時間が遅いが、データベースサーバー ログやリアルタイム パネルには反映されません。

connectTimeoutMSを使用して、接続フェーズでドライバーが無期限に待機しないようにします。

connectTimeoutMSを、セットのノードに対する最長ネットワーク レイテンシよりも大きい値に設定します。

たとえば、ノードのレイテンシが 10000 ミリ秒の場合、connectTimeoutMS5000(ミリ秒)に設定すると、ドライバーはそのノードに接続できなくなります。

ファイアウォールの設定に誤りがあると、ソケット接続が正しく閉じられず、ドライバーは接続が不適切に閉じられたことを検出できません。

ソケットが常に閉じられるようにするには、socketTimeoutMS を使用します。

socketTimeoutMS を、ドライバーが実行する最も遅い操作の 2 倍または 3 倍の長さに設定します。

サーバー ログやリアルタイム パネルによると、アプリケーションが新しい接続の作成に時間がかかりすぎています。

スタートアップ時に十分な接続が利用できていません。minPoolSize を設定してプールに接続を割り当てます。

minPoolSize を、スタートアップ時に使用可能にする接続数に設定します。

MongoClientインスタンスが、常にその数の接続が存在するようにします。

データベースへの負荷は低く、アクティブな接続数は常に少数です。アプリケーションが一度に実行する操作が、予想よりも少なくなっています。
maxPoolSize を増やすか、使用しているアプリケーションまたはフレームワーク内のアクティブなスレッドの数を増やします。
データベースの CPU 使用率が予想よりも高くなっています。 サーバーログまたはリアルタイム パネルに、予想以上の接続試行回数が表示されています。
maxPoolSize を減らすか、アプリケーション内のスレッド数を減らします。そうすれば、負荷を下げ応答時間を短縮できます。

警告

長時間実行されるサーバー操作を防ぐために、socketTimeoutMS を使用しないでください。代わりに、クエリで maxTimeMS() を使用して、長時間実行される操作をサーバーがキャンセルできるようにします。

各接続で実行中の操作の数を知るには、使用量を計算します。

3 つのノードを持つレプリカセットに接続する 4 つのアプリケーション サーバーを考えてみましょう。 このシナリオでは、4 つのアプリケーション サーバーのそれぞれが、レプリカセットの各ノードに対する接続プールを作成します。

maxPoolSizeにメンバー数を掛けて、各アプリケーション サーバーによって開かれる接続の最大数を計算します。

アプリケーションから 3 つのノードのレプリカセットへの発信接続を計算します。

100 ( maxPoolSizeデフォルト100 ) x 3 (レプリカセット ノード) = 300 (アプリケーションからの送信接続)

4 つのアプリケーション サーバーからレプリカセットへの着信接続を計算します。

100 ( maxPoolSizeデフォルト100 ) x 4 (アプリケーション サーバー) = 400 (各 mongod への受信接続)

戻る

接続プール