1. 使用MongoDB自带工具监控
vsize、物理内存res)等指标,默认每秒刷新一次。可通过-n参数指定刷新次数(如mongostat -n 5刷新5次),帮助快速识别高频率操作的瓶颈。read/write列),默认每秒更新。通过ns(命名空间)、read、write指标可定位读写密集的集合(如某集合read耗时过高可能需优化查询或添加索引)。mem.resident物理内存、mem.virtual虚拟内存)、连接数(connections.current当前连接)、锁等待(locks.globalAcquireCount全局锁获取次数)、复制状态(repl字段)等核心指标。可通过mongo shell执行,是排查性能问题的基础工具。secs_running)、客户端信息等。可识别长时间运行的慢操作(如secs_running > 10的操作需重点关注)。2. 利用第三方监控工具实现全面监控
MongoDB Exporter(如mongodb_exporter)收集MongoDB的指标(如mongodb_up实例健康状态、mongodb_stats_memory_resident内存使用、mongodb_stats_operations_insert插入操作数)。mongodb_stats_collection_count集合数量变化、mongodb_stats_memory_resident内存占用趋势),并设置告警规则(如内存使用超过80%触发邮件告警)。explain结果可视化)、资源使用(CPU、内存、磁盘IO)等模块,可直接定位性能瓶颈(如慢查询的索引使用情况)。explain可视化)。3. 分析慢查询优化性能
explain("executionStats")分析查询的执行计划,关注以下字段:
queryPlanner.winningPlan.stage:执行阶段(如COLLSCAN表示全表扫描,需优化;IXSCAN表示索引扫描,性能较好);executionStats.executionTimeMillis:查询执行时间(超过100ms可视为慢查询);executionStats.totalDocsExamined:扫描文档数量(远大于返回文档数需优化索引)。db.collection.createIndex({ field: 1 })),避免全表扫描;使用复合索引(如db.collection.createIndex({ field1: 1, field2: 1 }))优化多条件查询;定期通过db.collection.reIndex()重建碎片化索引。4. 查看日志定位问题
/var/log/mongodb/mongod.log,记录了启动/关闭信息、错误(如ERROR)、警告(如WARNING)等事件。通过sudo tail -f /var/log/mongodb/mongod.log实时查看日志,可快速定位异常(如连接数过多导致的connection refused、磁盘空间不足的警告)。