Docs 菜单
Docs 主页
/
数据库手册
/ / / /

监控慢速查询

$currentOp聚合阶段提供有关当前在MongoDB上运行的所有操作的信息。如果您的应用程序遇到性能问题,您可以围绕此阶段构建聚合管道,以监控慢速查询和类似问题。

此任务使用$currentOp 来识别应用程序上当前运行的慢速查询。要查找指定时间段内的所有慢速查询,请考虑使用分析器。

剖析器
说明

Atlas Query Profiler

为Atlas客户提供图表,以便轻松识别慢速查询和性能异常值。

将查询性能信息存储在集合中,允许您在MongoDB查询存在特定性能问题的查询。

Atlas查询分析器和数据库分析器都会影响服务器性能、占用磁盘空间并暴露有关加密字段的查询元数据。在启用它们之前,请考虑对性能和安全的影响。

此任务可识别存在性能问题的查询。如果您已经知道哪些查询存在性能问题,请参阅解释慢速查询以进行故障排除。

1

使用 $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升序对结果进行排序。

2

查看currentOp.active 字段。如果currentOp.activetrue ,MongoDB指示该操作当前正在运行。

要停止长时间运行的操作,请使用db.killOp() 方法停止给定的opid

3

查看currentOp.waitingForLock 字段。如果currentOp.waitingForLocktrue ,则服务器或集群上运行的另一个操作正在阻止查询。

要停止被阻止的操作,请使用 db.killOp() 方法停止给定的 opid

4

检查 currentOp.planSummary 字段中的值。

IXSCAN
指示查询执行了索引扫描。
COLLSCAN
指示查询执行了完整集合扫描。要更正此问题,请创建索引。
5

如果$currentOp 聚合阶段返回的查询需要进一步调查,请使用explain() 方法分析查询计划和执行统计信息。

有关详细信息,请参阅解释慢查询。

后退

查找慢速查询

在此页面上