Database Profiler
MongoDB提供了一个数据库分析器,可以显示针对数据库的每个操作的性能特征。使用分析器来定位运行缓慢的任何查询或写操作。例如,您可以使用这些信息来确定要创建哪些索引。
从MongoDB 4.2开始,用于读写操作的profiler条目和诊断日志消息(即mongod/mongos日志消息)包括:
- queryHash帮助识别具有相同查询形状的慢速查询。
- planCacheKey提供对慢速查询的查询计划缓存的更深入了解。
从4.2版开始(也可以从4.0.6版开始),副本集的SECONDARY成员现在开始记录日志条目,这些日志条目花费的时间比慢速操作阈值更长。这些缓慢的oplog消息:
- 诊断日志中记录了SECONDARY服务器的日志。
- 在REPL组件下记录应用op的文本:<oplog entry> took <num>ms。
- 不依赖于日志级别(系统级别或组件级别)。
- 不要依赖于分析级别。
- 可能会受到slowOpSampleRate的影响,取决于您的MongoDB版本:
- 在MongoDB 4.2和更早的版本中,这些慢oplog条目不受slowOpSampleRate的影响。MongoDB无论采样速率如何,都会记录所有慢的日志。
- 在MongoDB 4.4及以后版本中,这些慢oplog条目会受到slowOpSampleRate的影响。
MongoDB分析器不捕获慢oplog条目。
db.currentOp()
db.currentOp()
打印在mongod实例上运行的当前操作。
explain
cursor.explain()
和db.collection.explain()
方法返回查询执行的信息,比如MongoDB选择的用于执行查询和执行统计的索引。您可以在queryPlanner模式、executionStats模式或allPlansExecution模式下运行这些方法来控制返回的信息量。
从MongoDB 4.2开始,解释输出包括:
- queryHash帮助识别具有相同查询形状的慢速查询。
- planCacheKey提供对慢速查询的查询计划缓存的更深入了解。
具体使用请参考我的另一篇博客:MongoDB CRUD之分析查询性能
参考MongoDB官网文档:Evaluate Performance of Current Operations