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