1

i7 8コアCPUのWindows 7 x64でMongo 2.2.2を実行しています。当社の実稼働サーバーは、同じバージョンの Mongo を搭載した 256 コアのマシンで Red Hat Enterprise の下で実行されています。

私のWindowsマシンでの次の呼び出しのテストでは

db.users_v2_prod.aggregate( { $group : {_id : "$email", total : { $sum : 1 } } }, { $match : { total : { $gte : 3 } } }, { $sort : {total : -1} }, {$limit : 5} )

mongo が利用可能なリソースを十分に活用していないことに気付きました。クエリ中の CPU の合計負荷は ~10% です。Process Explorer によると、計算は 1 つのスレッドでのみ行われます。mongod私が持っている8つのコアのうち3つのコアしか使用していないようで、部分的に使用されています。

Mongo のエンジニアは、この実装の理論的根拠を説明していただけますか? 利用可能なリソースがあれば、なぜそれを使わないのか興味があります。私がグループ化しているフィールドのインデックスがあるので、すべてのコアで負荷を並列にしないでください。

特定のクエリが 650 万のドキュメントを含むコレクションで実行されました (mongobackup は 5 GB のファイルを生成します)。だから、それは何もクレイジーではありません。

PS。おまけの質問: GPU の使用を考えたことはありますか? 私のラップトップには1024コアのGPUがあります:)

4

1 に答える 1

2

おそらく、ここでは CPU が境界要因ではありません。これは、MongoDB の典型的なユース ケースのほとんどの場合に当てはまります。クエリは計算負荷が高くないように見えるため、ディスクからのデータのページングや RAM の不足という点で限界に達している可能性が高くなります。

実行の実際の統計を確認せずに言うのは難しいですが (そのため、munin-nodeがインストールされたMMSにホストを配置することをお勧めします)、MongoDB インスタンスで CPU がボトルネックになることはほとんどありません。

そうは言っても、並列化はおそらく改善される可能性がありますが、実装するのが最速ではないかもしれません. 上記のいずれも発生していない、または関連性がない場合は、複数のジョブを並行して実行できるかどうか、またはクライアント側で作業を分割して問題を改善できるかどうかを確認します. これらの問題についても、おそらく視聴/投票/コメントする必要があります。

https://jira.mongodb.org/browse/SERVER-5091 (集約操作の並列化) https://jira.mongodb.org/browse/SERVER-5088 (並列クエリ) https://jira.mongodb.org/browse /SERVER-4504 (集計フレームワークの説明を追加) (2.6 で追加)

于 2012-12-10T16:29:28.730 に答える