Debian环境下MongoDB性能优化策略
storage.wiredTiger.engineConfig.cacheSizeGB参数设置),确保工作集(活跃数据)能容纳在内存中,减少磁盘I/O。userId、transactionDate)创建单字段索引;对多字段查询(如db.transactions.find({userId: 1, status: 'active'}))创建复合索引,并注意字段顺序(将选择性高的字段放在前面)。db.transactions.createIndex({userId: 1, amount: 1}, {projection: {amount: 1}})),使查询直接通过索引返回数据,无需访问实际文档。db.collection.explain("executionStats")分析查询计划,确认索引使用情况;删除**选择性低于5%**的冗余索引(如状态字段只有“active”“inactive”两种值),减少写操作的开销。projection限制返回字段(如db.users.find({}, {name: 1, email: 1})),减少网络传输量;优化聚合管道,将$match前置(如db.orders.aggregate([{ $match: {status: 'paid'}}, { $group: {...}}])),尽早过滤数据,缩小中间结果集。skip()进行深度翻页(如skip(10000).limit(10)),改用游标分页(记录上次查询的_id,下次查询{ _id: {$gt: lastId} }),减少扫描行数;通过internalQueryMaxBlockingSortMemoryUsageMB参数(默认100MB)控制排序内存使用,避免大排序操作占用过多资源。readPreference: 'secondaryPreferred'),减轻主节点的读压力,提升整体读取性能。storage.wiredTiger.collectionConfig.blockCompressor: 'snappy')和文档级锁,提升并发性能。/etc/mongod.conf文件,优化以下参数:
net.maxIncomingConnections:根据并发连接数调整(如1000),避免连接数过多导致资源耗尽;operationProfiling.mode: 'slowOp':开启慢查询分析(默认阈值100ms),通过db.currentOp()定位慢查询;replication.oplogSizeMB:根据写入量调整Oplog大小(如5%的磁盘空间),防止主从同步中断。ulimit -n调整文件描述符限制(如65535),避免MongoDB因文件描述符不足无法处理大量连接。mongostat监控每秒查询次数(QPS)、写入延迟等指标;mongotop查看集合级别的读写时间分布,快速定位慢集合。db.collection.find().sort({$natural: -1}).limit(10)查看最近执行的慢查询,结合explain()分析执行计划,针对性优化。net.bindIp: '192.168.1.100'),配置防火墙限制传入流量(仅允许可信IP访问),减少网络干扰。