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

MongoDB指数有效性评估最佳实践,mongodb,performance-testing,mongodb-indexes,Mongodb,Performance Testing,Mongodb Indexes,我们希望在基于MongoDB的REST服务设置中评估我们的索引的有效性。其思想是使用合成数据集(例如10000000个文档)填充集合,然后运行load injector进程执行随机REST操作(每个操作都涉及MongoDB层的查询),以评估正在使用哪些索引以及有关这些索引的统计信息(例如,每个索引的命中率) 我们考虑过使用命令或命令。然而,关于explain(),它有两个问题:1)它只允许评估单个查询的有效性;2)它很难在“黑盒”环境中使用,在这种环境中,我们的load injector进程与M

我们希望在基于MongoDB的REST服务设置中评估我们的索引的有效性。其思想是使用合成数据集(例如10000000个文档)填充集合,然后运行load injector进程执行随机REST操作(每个操作都涉及MongoDB层的查询),以评估正在使用哪些索引以及有关这些索引的统计信息(例如,每个索引的命中率)

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

因此,哪种方法是进行此类测试的最佳方法?欢迎您提供有关该主题的任何过程说明或URL。

您应该阅读

您可以通过以下方式打开配置文件:

db.setProfilingLevel(2);
或者,如果您不想太多噪音,只想检查耗时超过20毫秒的查询:

db.setProfilingLevel(1,20);
您可以查询
system.profile
以获取有关慢速查询的信息,例如查找所有低于30毫秒的操作:

db.system.profile.find( { millis : { $gt : 30 } } ).pretty()
您可以使用
explain()
手动分析每个慢速查询

对于实时监控,您可以使用和。你也应该考虑设立(免费监控服务)。在彩信中,您可以查看btree点击/未点击,并将其与其他相关统计数据进行比较

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


非常感谢您对评测的反馈,我们会考虑的。但是,请注意,我们最初的目的是测量一个索引被命中/未命中的次数,而不是检测查询(当然,尽管这两件事是相关的)。从这个意义上讲,你讲的关于btree统计的内容听起来很有希望。。。是否可以在不涉及MMS的情况下使用它(以简化我们的测试设置,而不需要涉及我了解的针对生产环境的工具)?如果您知道您的查询,explain()将用于告诉您使用了哪些索引以及有关其性能的信息。您是说您不知道应用程序正在生成什么查询,因此无法通过explain()运行它们以查看哪些索引将“获胜”?@BobKuhar该查询取决于正在使用的REST API操作,并且很难对与每个操作相关联的“查询模式”建模。因此,我想知道是否会有我在问题正文中介绍的那种“黑箱”方法。然而,若并没有其他替代方案存在(尽管Christian关于serverStatus()的回答听起来很有希望),我们将以每个操作的查询模式建模结束,并使用explain()。谢谢
db.serverStatus()