温馨提示×

MongoDB性能如何监控

小樊
46
2026-01-10 01:19:51
栏目: 云计算

MongoDB 性能监控实践指南

一 内置工具与快速排障

  • 使用 mongostat 观察全局操作吞吐与资源压力:关注 insert/query/update/delete/getmore/command 每秒操作数、faults/s(缺页,Linux 才有,持续偏高意味着内存不足)、locked %(全局写锁占比,尽量低于 50%)、qr/qw(读/写队列长度)、conn(当前连接数)。常用:mongostat --host --port -u -p
  • 使用 mongotop 定位集合级耗时:按集合汇总读/写耗时,默认 1 秒刷新,可指定间隔如 mongotop 5;带 –locks 可查看数据库级锁占用,快速识别热点集合与锁争用。
  • 使用 db.serverStatus() 获取细粒度内部指标:连接、内存映射、页面错误、索引命中、队列、断言等,用于基线采集与趋势对比。
  • 使用 Database Profiler 捕获慢查询:设置级别与阈值 db.setProfilingLevel(1, {slowms: 100});在 db.system.profile 中分析 ns、millis、planSummary、keysExamined、docsExamined 等定位是否缺少索引或扫描过多文档。
  • 使用 db.stats() / db.collection.stats() 查看库/集合规模、索引大小、对象数量,辅助容量与结构评估。
  • 可视与辅助:MongoDB Compass 用于可视化查询与索引;旧版本可启用 HTTP 控制台(端口 = 数据端口 + 1000,如 28017) 查看连接与集合访问统计(注意仅在受控网络与安全策略下使用)。

二 系统与平台监控

  • 操作系统指标与数据库强相关:用 top/htop 观察 mongod 的 CPU内存;用 iostat -x 1 检查 磁盘 IOPS/await/svctm 是否成为瓶颈;用 vmstat 1 观察 上下文切换/运行队列;网络侧关注 带宽与丢包/重传
  • 容器与云环境:采集 cgroup/容器/Pod 资源限制与实际使用,避免因 CPU 限流/内存 OOM 引发性能劣化。
  • 建议将系统指标与数据库指标对齐时间窗口,便于关联分析(如磁盘高时延时是否伴随查询延迟上升)。

三 可视化与长期观测

  • 云托管:使用 MongoDB Atlas 获取实时监控、查询分析、索引建议与告警,适合开箱即用的可视化与运维。
  • 自建可视化:采用 Prometheus + Grafana 体系,通过 MongoDB Exporter 暴露指标(常见端口 9216),在 Grafana 中构建 操作延迟、连接数、锁争用、缓存命中、磁盘 IO 等面板并设置阈值告警。
  • 企业监控:使用 Zabbix/Nagios 等平台配合插件/脚本采集与告警,适合与现有 ITSM/CMDB 联动。

四 关键指标与告警阈值建议

指标 含义 建议关注 告警/优化方向
操作吞吐 insert/query/update/delete/command 每秒操作数 突增/骤降 结合慢查询与连接数定位业务变化或阻塞
faults/s 缺页次数 持续 > 0 且升高 增加内存、优化工作集、减少随机 IO
locked % 全局写锁占比 持续 > 50% 降低长事务、优化索引、减少大批量写
qr/qw 读/写队列 持续 > 0 检查锁争用、慢查询、连接风暴
conn 当前连接数 接近/超过连接上限 调整连接池、排查连接泄漏
page_faults 页面错误 升高 与 faults/s 联动,优化内存与工作集
idx miss % / keysExamined/docsExamined 索引命中与扫描 命中低或扫描远大于返回 增加/改写索引、改写查询
query execution time (ms) 查询延迟 超过 slowms(如 100ms) 使用 Profiler/Atlas 定位并优化
disk await/svctm 磁盘响应 明显升高 更换/扩容更快存储、优化索引与聚合
replication lag 主从/分片复制延迟 持续增大 检查网络、从节点负载、Oplog 窗口
asserts 内部错误/警告 非 0 增长 及时排查错误日志与异常操作

五 落地步骤与排障流程

  • 建立基线:在业务平稳期采集 mongostat/mongotop、db.serverStatus()、系统指标5–15 分钟 粒度基线,记录峰值与周期性规律。
  • 配置告警:围绕上表设置分层阈值(如 P95 查询延迟 > 100mslocked % > 50%faults/s 持续 > 0磁盘 await 高复制延迟突增),避免告警风暴。
  • 慢查询治理:开启 Profiler 或依赖 Atlas/慢查询日志,按 ns、millis、planSummary 排序,优先处理扫描大、返回小的查询,补充/改写索引并验证执行计划。
  • 资源瓶颈定位:当延迟升高时,联动查看 CPU/内存/磁盘 IO/网络队列/锁,区分计算密集、内存不足与 IO 瓶颈三类根因。
  • 验证与回放:优化后回放典型负载,观察 延迟、吞吐、锁、IO 是否按预期改善,并更新基线。
  • 注意事项:生产环境谨慎开启 Profiler 级别 2(开销大);HTTP 控制台 仅在可信网络使用;监控采集频率与保留策略需权衡 开销与时效性

0