MongoDB 慢查询分析
基于 MongoDB profiler 自动识别慢查询并给出索引优化建议,入口在「资源监控 → MongoDB」的慢查询页签。
前提
- 被诊断的 MongoDB 需在数据源页添加并启用,且用途勾选慢查询诊断。
- 多个启用诊断的实例(如分片集群的多个分片)会自动聚合分析,无需额外配置。
工作原理
- 采集:平台周期性从 MongoDB
system.profile拉取慢查询记录(需已开 profiler)。 - 分组:按 query shape(忽略具体参数值的查询模板)聚合,每组显示累计次数、平均 / 最长耗时、扫描与返回文档数、典型样例。
- 索引建议:结合查询字段组合与现有索引,给出可创建的复合索引,支持一键创建(后台调用
createIndex)。
启用 profiler
列表为空时,先在每个被监控库开启 profiler(slowms 为慢查询阈值,生产建议 100~500ms):
use mdwsrows; db.setProfilingLevel(1, { slowms: 100 })
use mdservicedata; db.setProfilingLevel(1, { slowms: 100 })
use mdworksheet; db.setProfilingLevel(1, { slowms: 100 })
use mdworkflow; db.setProfilingLevel(1, { slowms: 100 })
注意事项
- profiler 有约 1~3% 开销,生产只采
slowms阈值以上,不要用 level=2(全量采集)。 system.profile是 capped collection(默认 1MB),高 QPS 下滚动很快;需要更长留存可扩容:db.setProfilingLevel(0)db.system.profile.drop()db.createCollection("system.profile", { capped: true, size: 100000000 }) // 100MB- 一键建索引前评估对写入的影响,必要时低峰执行。