我们想在基于MongoDB的REST服务设置中评估索引的有效性。想法是使用合成数据集(例如10,000,000个文档)填充集合,然后运行负载注入器进程执行随机REST操作(每个操作涉及MongoDB层的查询)以评估正在使用哪些索引以及有关它们的统计信息(例如每个指数命中率。)
我们考虑过使用explain()命令或indexStats。但是,关于explain(),它有两个问题:1)它只允许评估单个查询的有效性; 2)很难在我们的加载注入器进程与REST服务交互的“黑盒子”环境中使用它在MongoDB上,但不是MonoDB本身。关于indexStats,据我所知,它显示了“在磁盘上”的索引结构信息,但没有显示索引使用情况。
因此,这是进行这种测试的最佳方式吗?任何程序描述或有关该主题的信息的URL都受到欢迎。
答案 0 :(得分:3)
您应该阅读performance profiling。
您可以使用以下命令启用分析:
db.setProfilingLevel(2);
或者,如果您不想太多噪音,并且您只想检查超过例如20ms:
db.setProfilingLevel(1,20);
您可以查询system.profile
以获取有关慢查询的信息,例如找到所有低于30毫秒的操作:
db.system.profile.find( { millis : { $gt : 30 } } ).pretty()
您可以使用explain()
手动配置每个慢查询。
对于实时监控,您可以使用mongotop和mongostat。您还应该考虑设置MMS(免费监控服务)。在MMS中,您可以检查btree命中/未命中,并将其与其他相关统计信息进行比较。
修改强> 您可以使用indexCounters命令获取相关的serverStatus数据:
db.serverStatus()