2

mongos私は、アプリサーバー上で実行され、3 つのmongocインスタンスが実行され、それぞれ 3 つのインスタンスの 2 つのシャードが実行されている、かなり標準的な mongo セットアップを使用していmongodます。

それはすべて正常に実行されますが、私が目にするすべてのドキュメントにはmongos、かなり軽量なプロセスであると書かれています。私の場合はそうではないようです。リクエストを行う複数のユーザーをシミュレートするテストを実行していますが、制限要因はmongosプロセスにあるようです。nginx と php-fpm もアプリ サーバーで実行されていますが、テスト中に CPU の約 15% しか使用していません。mongos約85%です。

アプリサーバーを追加して補うことができますが、mongos軽量であるはずなので、何か間違っているのではないかと思いました。私が知る限り、私のクエリはすべてインデックス化されています。各コレクションのデフォルトの MongoID をシャーディング インデックスとして使用しています。

4

1 に答える 1

1

大規模なインメモリ ソートや多数のマージ ソート、マップ リデュース、カウントなどを実行する必要がある場合mongosは、軽量ではありません。クエリを送信するシャードを決定するだけであれば、軽量になります。

それらのシャードからのデータを大量に集約し、それらをマージし、並べ替えてからエンド ユーザーに渡す必要がある場合、作業は非常に困難になります。

で何が起こっているかを確認したい場合は、mongosそれにログインしてdb.currentOp()実行し、その時点で何が実行されているかを確認します。これは単一の時点であるため、原因を明らかにするには、いくつかのサンプルが必要になる場合があります。同様に、mongostatを使用すると、時間の経過とともに実行されている操作を確認でき、役立つ可能性があります。

最後に、問題のあるユーザーを特定するための可能な戦略として、各ユーザーを一時的に別のユーザーに接続して、そのmongosパフォーマンスを確認することができます。そのためにはリファクタリングが必要になる場合がありますが、便利なオプションになる可能性があります。

于 2013-05-06T15:24:26.153 に答える