首先检查MongoDB服务是否正常运行,使用systemctl status mongod或service mongod status命令查看服务状态(若未运行,需启动服务:sudo systemctl start mongod)。同时,通过top、htop或vmstat监控系统资源(CPU、内存、磁盘I/O、网络),识别是否存在资源耗尽(如CPU占用100%、内存不足)的情况。
使用MongoDB自带工具实时查看性能指标:
db.setProfilingLevel(1, 100)(1表示开启,100表示慢查询阈值,单位毫秒)记录运行时间超过阈值的查询;explain("executionStats"),分析执行计划中的关键指标(如winningPlan是否使用了索引、executionTimeMillis执行时间、totalDocsExamined扫描文档数),判断是否因全表扫描、索引缺失导致性能问题。db.collection.getIndexes()查看集合索引,避免过多冗余索引(每个索引会增加写入开销);find({status: "active"}))、排序字段(如sort({createdAt: -1}))创建复合索引(如db.collection.createIndex({status: 1, createdAt: -1}));explain()中的isCovered为true),减少磁盘读取。修改/etc/mongod.conf配置文件优化性能:
storage.wiredTiger.engineConfig.cacheSizeGB设置为物理内存的50%-70%(如8GB内存可设为4GB),提高缓存命中率;net.maxIncomingConnections根据并发连接数调整(如设为1000),避免连接数过多导致资源竞争;storage.wiredTiger.collectionConfig.blockCompressor设为snappy(默认)或zstd,减少磁盘I/O。db.serverStatus().mem.resident接近物理内存,需升级内存);iostat -x 1监控磁盘I/O(若await时间过长、%util接近100%,需更换SSD或增加磁盘带宽);top中CPU占用过高,需升级CPU或优化查询减少CPU消耗)。使用专业工具实现长期性能监控与可视化:
readPreference设置为secondaryPreferred,将读请求分发到从节点,减轻主节点压力;