我在 i7 八核 CPU 上的 Windows 7 x64 上运行 Mongo 2.2.2。我们的生产服务器在 Red Hat Enterprise 下运行在具有相同版本 Mongo 的 256 核机器上。
在我对 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 计算只发生在一个线程中。mongod
似乎只使用了我拥有的 8 个内核中的 3 个,甚至它们也被部分使用。
Mongo 的工程师能否解释一下他们对此实现的理由?我很好奇为什么不使用更多可用的资源。为什么不并行处理所有内核的负载,因为您有我要分组的字段的索引。
给定查询是在包含 650 万个文档的集合上执行的(mongobackup 生成 5GB 文件)。所以这没什么疯狂的。
PS。还有一个额外的问题:你考虑过使用 GPU 吗?我的笔记本电脑上有 1024 核 GPU :)