MongoDB在Debian上的性能调优策略
/etc/default/grub,添加GRUB_CMDLINE_LINUX_DEFAULT="quiet numa=off transparent_hugepage=never";更新GRUB配置(sudo grub-mkconfig -o /boot/grub/grub.cfg)并重启系统。也可通过/etc/rc.local文件或运行时命令(echo never > /sys/kernel/mm/transparent_hugepage/enabled)临时关闭。/etc/security/limits.conf,增加MongoDB用户的文件描述符限制(如mongod hard nofile 64000、mongod soft nofile 64000),避免高并发时连接数受限。/etc/mongod.conf中的storage.wiredTiger.engineConfig.cacheSizeGB参数(建议设置为物理内存的50%-70%,避免占用过多内存导致系统交换)。/etc/mongod.conf中的net.bindIp(如0.0.0.0允许远程访问,或指定具体IP增强安全性);确认net.port(默认27017)未被其他服务占用。journal.enabled: true(启用日志,确保数据持久性);调整operationProfiling.mode为slowOp(记录慢查询,默认阈值100ms),帮助定位性能瓶颈。systemLog.path(如/var/log/mongodb/mongod.log)指定日志路径;定期清理或轮转日志文件(如使用logrotate),避免日志过大占用磁盘空间。db.collection.createIndex({ field1: 1 }));对多字段查询使用复合索引(如db.collection.createIndex({ field1: 1, field2: -1 })),注意索引顺序需匹配查询条件。explain("executionStats")方法分析查询执行计划(如db.collection.find({ field1: 1 }).explain("executionStats")),确认索引是否被命中;定期使用db.collection.validate()检查索引碎片,必要时重建索引(db.collection.reIndex())。db.collection.find({ field1: 1 }, { _id: 0, field1: 1 })),避免传输冗余数据(如_id字段)。/abc/)或无索引的$where操作符,这类操作会导致全表扫描,严重影响性能。$match阶段放在聚合管道前面(尽早过滤数据),减少后续阶段的处理量;合并多个操作(如$group与$sort),减少中间文档生成。rs.initiate({ _id: "rs0", members: [{ _id: 0, host: "mongo1:27017" }, { _id: 1, host: "mongo2:27017" }] })),读操作可指向从节点(readPreference: secondary),减轻主节点压力。sh.enableSharding("mydatabase")),并对分片键(如user_id)合理选择(避免数据倾斜),提高写入和查询的可扩展性。mongostat监控每秒查询次数、插入/更新/删除操作数等实时指标;使用mongotop查看各集合的读写时间分布,快速定位热点集合。db.setProfilingLevel(1, 50),记录超过50ms的操作),定期分析慢查询日志,针对性优化查询语句或索引。