温馨提示×

centos mongodb慢查询怎么查

小樊
51
2026-10-11 18:19:09
栏目: 云计算

在 CentOS 上排查 MongoDB 慢查询,一般从以下几个步骤入手:


一、开启并查看 MongoDB 慢查询日志

1. 查看当前慢查询阈值

mongo
db.getProfilingStatus()

常见输出:

{ "was" : 0, "slowms" : 100 }
  • was: 0 表示未开启 profiling
  • slowms: 100 表示超过 100ms 的操作为慢查询

2. 开启慢查询日志(推荐方式)

db.setProfilingLevel(1, 100)
  • 1:记录慢查询
  • 100:超过 100ms 的语句

全局开启(所有库):

db.setProfilingLevel(1, 100)
use admin
db.runCommand({ profile: 1, slowms: 100 })

关闭:

db.setProfilingLevel(0)

3. 查看慢查询记录

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

常用过滤:

db.system.profile.find({ millis: { $gt: 500 } }).pretty()

二、查看 MongoDB 日志文件(CentOS)

1. 找到日志路径

cat /etc/mongod.conf | grep -i log

一般路径:

/var/log/mongodb/mongod.log

2. 实时查看慢查询

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

三、使用 explain 分析慢查询

db.collection.find({ ... }).explain("executionStats")

关注重点:

  • executionTimeMillis
  • totalKeysExamined
  • totalDocsExamined
  • 是否走了索引(IXSCAN vs COLLSCAN)

四、查看当前正在执行的慢查询

db.currentOp({ "active" : true, "secs_running" : { "$gt" : 5 } })

杀掉慢查询(谨慎):

db.killOp(opid)

五、检查索引是否合理

db.collection.getIndexes()

创建索引示例:

db.collection.createIndex({ field: 1 })

六、系统层面检查(CentOS)

1. CPU / 内存 / IO

top
iostat -x 1
free -h

2. 磁盘是否慢

df -h
iotop

七、生产环境建议

  • slowms 设为 100~200ms
  • 不要长期开 profile=2
  • 慢查询日志定期清理
  • 核心查询必须建索引

如果你愿意,可以贴一下:

  • MongoDB 版本
  • 慢查询 SQL / 查询语句
  • explain 结果

我可以帮你直接分析优化方案。

0 踩