MongoDB指数有效性评估最佳实践

时间:2014-06-04 12:05:02

标签: mongodb performance-testing mongodb-indexes

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

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

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

1 个答案:

答案 0 :(得分:3)

您应该阅读performance profiling

您可以使用以下命令启用分析:

db.setProfilingLevel(2);

或者,如果您不想太多噪音,并且您只想检查超过例如20ms:

db.setProfilingLevel(1,20);

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

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

您可以使用explain()手动配置每个慢查询。

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

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

db.serverStatus()