2

我有一个非常标准的 mongo 设置,mongos在应用服务器上运行,三个mongoc实例运行,两个分片,mongod每个分片三个实例。

一切运行良好,但我看到的所有文档都说这mongos应该是一个相当轻量级的过程。我的情况似乎不是这样。我正在运行一个模拟几个用户发出请求的测试,限制因素似乎是mongos过程。nginx 和 php-fpm 也在应用服务器上运行,但在测试期间它们只使用了大约 15% 的 CPU。mongos约为 85%。

我可以添加更多的应用服务器来弥补,但由于mongos应该更轻量级,我想也许我做错了什么。据我所知,我的所有查询都已编入索引。我在每个集合中使用默认的 MongoIDs 作为分片索引。

4

1 回答 1

1

如果mongos必须进行大型内存排序或大量合并排序、map-reduce、计数等,那么它将不是轻量级的。当它所要做的就是确定您将查询发送到哪些分片时,它将是轻量级的。

当它必须对来自这些分片的数据进行大量聚合、合并、排序然后将它们交还给最终用户时,它会更加努力地工作。

如果您想查看发生了什么,mongos然后登录并运行db.currentOp()以查看当时正在运行的内容 - 因为它是一个时间点,您可能需要几个样本才能让罪魁祸首显而易见。同样,mongostat可以为您提供随时间运行的操作的视图,这可能会有所帮助。

最后——作为找出问题用户的一种可能策略,你可以让每个人临时连接到一个单独的人mongos,然后看看他们的表现——这样做可能需要一些重构,但这可能是一个有用的选择。

于 2013-05-06T15:24:26.153 回答