3

我们想评估我们的索引在基于 MongoDB 的 REST 服务设置中的有效性。想法是用合成数据集(例如 10,000,000 个文档)填充集合,然后运行负载注入器进程执行随机 REST 操作(每个操作都涉及 MongoDB 层的查询)以评估正在使用的索引和有关它们的统计信息(例如每个索引命中率)。

我们考虑过使用explain()命令或indexStats。然而,关于 explain(),它有两个问题:1) 它只允许评估单个查询的有效性,2) 在负载注入器进程与 REST 服务交互的“黑盒”环境中使用起来很困难在 MongoDB 上,但不是 MonoDB 本身。关于 indexStats,据我了解,它显示有关“磁盘上”的索引结构的信息,而不是有关索引使用情况的信息。

因此,哪种方法是进行这种测试的最佳方式?任何程序描述或有关该主题的信息的 URL 都非常受欢迎。

4

1 回答 1

3

您应该阅读有关性能分析的信息。

您可以使用以下方法打开分析:

db.setProfilingLevel(2);

或者,如果您不想产生太多噪音并且只想检查耗时超过 20 毫秒的查询:

db.setProfilingLevel(1,20);

您可以查询system.profile以获取有关慢查询的信息,例如查找所有慢于 30 毫秒的操作:

db.system.profile.find( { millis : { $gt : 30 } } ).pretty()

然后,您可以使用 手动分析每个慢查询explain()

对于实时监控,您可以使用mongotopmongostat。您还应该考虑设置MMS(免费监控服务)。在 MMS 中,您可以检查 btree 命中/未命中并将它们与其他相关统计数据进行比较。

编辑 您可以使用serverStatus命令获取相关的indexCounters数据:

db.serverStatus()
于 2014-06-04T12:33:13.067 回答