接続プール設定のチューニング
項目一覧
問題点 | 解決法 |
---|---|
アプリケーション側の処理時間が遅いが、データベースサーバー ログやリアルタイム パネルには反映されません。 |
たとえば、ノードのレイテンシが 10000 ミリ秒の場合、 |
ファイアウォールの設定に誤りがあると、ソケット接続が正しく閉じられず、ドライバーは接続が不適切に閉じられたことを検出できません。 | ソケットが常に閉じられるようにするには、
|
サーバー ログやリアルタイム パネルによると、アプリケーションが新しい接続の作成に時間がかかりすぎています。 | スタートアップ時に十分な接続が利用できていません。 minPoolSize を、スタートアップ時に使用可能にする接続数に設定します。
|
データベースへの負荷は低く、アクティブな接続数は常に少数です。アプリケーションが一度に実行する操作が、予想よりも少なくなっています。 | maxPoolSize を増やすか、使用しているアプリケーションまたはフレームワーク内のアクティブなスレッドの数を増やします。 |
データベースの CPU 使用率が予想よりも高くなっています。サーバーログまたはリアルタイム パネルに、予想以上の接続試行回数が表示されています。 | maxPoolSize を減らすか、アプリケーション内のスレッド数を減らします。そうすれば、負荷を下げ応答時間を短縮できます。 |
警告
長時間実行されるサーバー操作を防ぐために、socketTimeoutMS
を使用しないでください。代わりに、クエリで maxTimeMS()
を使用して、長時間実行される操作をサーバーがキャンセルできるようにします。
最大接続数の計算
各接続で実行中の操作の数を知るには、使用量を計算します。
3 つのノードを持つレプリカセットに接続する 4 つのアプリケーション サーバーを考えてみましょう。 このシナリオでは、4 つのアプリケーション サーバーのそれぞれが、レプリカセットの各ノードに対する接続プールを作成します。
maxPoolSize
にメンバー数を掛けて、各アプリケーション サーバーによって開かれる接続の最大数を計算します。
アプリケーションから 3 つのノードのレプリカセットへの発信接続を計算します。
100 ( maxPoolSize
デフォルト100
) x 3 (レプリカセット ノード) = 300 (アプリケーションからの送信接続)
4 つのアプリケーション サーバーからレプリカセットへの着信接続を計算します。
100 ( maxPoolSize
デフォルト100
) x 4 (アプリケーション サーバー) = 400 (各 mongod への受信接続)