在 MongoDB 中查“慢日志”通常指的是 慢查询日志(Slow Query Log),也就是执行时间超过阈值的操作记录。下面按常用方式给你整理一下。
db.getProfilingStatus()
常见返回:
{
was: 1,
slowms: 100,
sampleRate: 1
}
含义:
was
0:关闭 profiling1:只记录慢操作2:记录所有操作slowms:慢查询阈值(毫秒)sampleRate:采样率(MongoDB 4.4+)// 记录超过 100ms 的慢查询
db.setProfilingLevel(1, { slowms: 100 })
db.setProfilingLevel(2)
db.setProfilingLevel(0)
MongoDB 会把慢查询记录在 system.profile 集合中。
db.system.profile.find().sort({ ts: -1 }).limit(10).pretty()
db.system.profile.find({ op: "query" }).sort({ ts: -1 }).pretty()
db.system.profile.find().sort({ millis: -1 }).limit(5).pretty()
db.system.profile.find({
ns: "dbName.collectionName"
}).sort({ ts: -1 }).pretty()
如果开启了 日志级别的慢查询(默认通常开启):
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
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 或日志里的慢查询,我可以帮你直接分析该怎么加索引或改写。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。