温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

mongodb怎么查慢日志

发布时间:2026-11-07 21:31:52 来源:亿速云 阅读:93 作者:小樊 栏目:数据库

在 MongoDB 中查“慢日志”通常指的是 慢查询日志(Slow Query Log),也就是执行时间超过阈值的操作记录。下面按常用方式给你整理一下。


一、查看慢查询日志是否开启 & 阈值

1. 查看当前配置

db.getProfilingStatus()

常见返回:

{
  was: 1,
  slowms: 100,
  sampleRate: 1
}

含义:

  • was
    • 0:关闭 profiling
    • 1:只记录慢操作
    • 2:记录所有操作
  • slowms:慢查询阈值(毫秒)
  • sampleRate:采样率(MongoDB 4.4+)

二、开启慢查询日志

1. 只对当前实例生效(重启失效)

// 记录超过 100ms 的慢查询
db.setProfilingLevel(1, { slowms: 100 })

2. 记录所有操作(调试用,不建议生产)

db.setProfilingLevel(2)

3. 关闭 profiling

db.setProfilingLevel(0)

三、从 system.profile 集合查慢日志

MongoDB 会把慢查询记录在 system.profile 集合中。

1. 查看慢查询

db.system.profile.find().sort({ ts: -1 }).limit(10).pretty()

2. 只看查询类慢操作

db.system.profile.find({ op: "query" }).sort({ ts: -1 }).pretty()

3. 按耗时排序

db.system.profile.find().sort({ millis: -1 }).limit(5).pretty()

4. 查看某个集合的慢查询

db.system.profile.find({
  ns: "dbName.collectionName"
}).sort({ ts: -1 }).pretty()

四、从 MongoDB 日志文件查慢查询

如果开启了 日志级别的慢查询(默认通常开启):

1. 在 mongod 日志中查找

grep "slow query" /var/log/mongodb/mongod.log

或:

tail -f /var/log/mongodb/mongod.log | grep "duration"

示例日志:

2024-01-01T10:00:00.123+0800 I COMMAND  [conn123] command db.coll find ... planSummary: COLLSCAN keysExamined:0 docsExamined:1000000 ... durationMillis:1234

五、通过 MongoDB 配置文件开启(推荐)

mongod.conf 示例

operationProfiling:
  mode: slowOp
  slowOpThresholdMs: 100

修改后重启 MongoDB:

systemctl restart mongod

六、常用慢查询分析字段

字段 含义
op 操作类型(query/insert/update/delete)
ns 数据库.集合
command 实际执行的命令
millis 执行耗时(ms)
planSummary 执行计划(如 COLLSCAN)
docsExamined 扫描文档数
keysExamined 使用索引数

七、定位慢查询后的常见优化方向

  • 是否走了 COLLSCAN(全表扫描)
  • 是否缺少索引
  • 是否返回字段过多
  • 是否排序未走索引
  • 是否有大文档

如果你愿意,可以贴一段 system.profile 或日志里的慢查询,我可以帮你直接分析该怎么加索引或改写。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手