$currentOp
聚合阶段提供有关当前在MongoDB上运行的所有操作的信息。如果您的应用程序遇到性能问题,您可以围绕此阶段构建聚合管道,以监控慢速查询和类似问题。
关于此任务
数据库分析器
此任务使用$currentOp
来识别应用程序上当前运行的慢速查询。要查找指定时间段内的所有慢速查询,请考虑使用分析器。
剖析器 | 说明 |
---|---|
为Atlas客户提供图表,以便轻松识别慢速查询和性能异常值。 | |
将查询性能信息存储在集合中,允许您在MongoDB查询存在特定性能问题的查询。 |
Atlas查询分析器和数据库分析器都会影响服务器性能、占用磁盘空间并暴露有关加密字段的查询元数据。在启用它们之前,请考虑对性能和安全的影响。
解释查询
此任务可识别存在性能问题的查询。如果您已经知道哪些查询存在性能问题,请参阅解释慢速查询以进行故障排除。
步骤
检索当前操作。
使用 $currentOp
聚合阶段从MongoDB检索当前操作:
db.getSiblingDB("admin").aggregate( [ { $currentOp: { allUsers: true } }, { $match: { secs_running: { $gt: 2 } } }, { $sort: { secs_running: 1 } } ] )
[ { "opid": "12345", "secs_running": 5, "active": true, "ns": "sample_mflix.movies", "command": { "find": "movies", "filter": { "title": { "$regex": "The" } } }, "planSummary": "COLLSCAN", "locks": { ... }, "client": "203.0.113.25:43210" } ]
此聚合管道检索集群中的所有当前操作。然后,$match
聚合阶段会筛选出运行时间超过两秒的操作。这允许您过滤在指定时间段内运行的查询。调整该值以匹配您的应用程序和数据库需求。
$sort
阶段按optime升序对结果进行排序。
检查活动。
查看currentOp.active
字段。如果currentOp.active
为true
,MongoDB指示该操作当前正在运行。
要停止长时间运行的操作,请使用db.killOp()
方法停止给定的opid
。
检查是否有锁。
查看currentOp.waitingForLock
字段。如果currentOp.waitingForLock
为true
,则服务器或集群上运行的另一个操作正在阻止查询。
要停止被阻止的操作,请使用 db.killOp()
方法停止给定的 opid
。
检查计划摘要。
检查 currentOp.planSummary
字段中的值。
IXSCAN
- 指示查询执行了索引扫描。
COLLSCAN
- 指示查询执行了完整集合扫描。要更正此问题,请创建索引。
解释该查询。
如果$currentOp
聚合阶段返回的查询需要进一步调查,请使用explain()
方法分析查询计划和执行统计信息。